我已经为此苦苦挣扎了一整天。
这就是我所拥有的。一个User
模型和一个Address
模型。User
has_many :addresses
和Adddress
belongs_to :user
。
现在我想搜索其电子邮件包含给定术语的用户,或者其中一个用户的地址包含该术语。所以可以说这个词是'jap',应该返回任何地址城市或地址行User
的任何用户或任何用户。email like '%jap%'
like '%jap%'
我可以像这样通过简单的加入来获得用户
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%')
这给了我想要的用户。我想要的是对于返回的用户,我还想要那些符合条件的地址。
如果在上述之后我做
users.first.addresses
它会给我所有该用户的地址。我知道我可以像这样对该用户的地址进行另一个查询
users.first.addresses.where( addresses.city like '%jap%' OR addresses.address_line like '%jap%')
但这不是它应该如何工作的。我已经尝试过包含并在谷歌上搜索过,但还没有找到解决方案。有没有人遇到过这个???
编辑#1:有很多类似的解决方案有 2 个查询,我追求的是一个单一的查询解决方案,因为对我来说,两次对地址应用相同的条件是没有意义的。