Here is what I have. A
User model and an
has_many :addresses and Address belongs_to :user.
Now I want to search for users whose email contains a give term, or one of the user's addresses contains that term. So lets say the term is 'jap', any User whose
email like '%jap%' or any user whose any address city or address_line is
like '%jap%' should be returned.
I can get the Users with a simple join like this:
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%')
then to get those addresses (if any) that matched the search term I have to query again for each user returned:
users.each do |u| u.addresses.where("addresses.city like '%jap%' OR addresses.address_line like '%jap%'") end
Is there a way to improve this so that I only search the addresses table once? I mean, a single query that returns the Users and the matching addresses for each user.