2 votes

Rails 3 Active Record Fetch modèle associé basé sur la portée

Cela fait une journée entière que je me débats avec ça.

Voici ce que j'ai. A User et un modèle de Address modèle. User has_many :addresses y Adddress belongs_to :user .

Maintenant je veux rechercher les utilisateurs dont l'email contient un terme donné, ou l'adresse d'un des utilisateurs contient ce terme. Disons que le terme est 'jap', n'importe quel User dont email like '%jap%' ou tout utilisateur dont l'adresse city ou address_line est like '%jap%' doit être retourné.

Je peux obtenir les utilisateurs avec une simple jointure comme celle-ci

users = User.joins('LEFT OUTER JOIN addresses ON users.id=addresses.user_id').where('users.email like '%jap%' OR addresses.city like '%jap%' OR addresses.address_line like '%jap%')

Cela me donne les utilisateurs souhaités. Ce que je veux, c'est qu'avec l'utilisateur renvoyé, je veux aussi les adresses qui correspondent aux critères.

Si après ce qui précède, je fais

users.first.addresses

Cela me donnera toutes les adresses de cet utilisateur. Je sais que je peux faire une autre requête sur les adresses de cet utilisateur comme ceci

users.first.addresses.where( addresses.city like '%jap%' OR addresses.address_line like '%jap%')

Mais ce n'est pas comme ça que ça devrait fonctionner. J'ai essayé de comprendre et de chercher sur Google mais je n'ai pas encore trouvé de solution. Quelqu'un a-t-il déjà rencontré ce problème ?

Edit#1 Il existe de nombreuses solutions similaires avec deux requêtes. Ce que je recherche, c'est une solution à requête unique, car il me semble absurde d'appliquer deux fois les mêmes conditions sur des adresses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X