Ruby on rails 基于作用域的Rails 3活动记录获取关联模型

Ruby on rails 基于作用域的Rails 3活动记录获取关联模型,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我已经为此挣扎了一整天了 这是我的。用户模型和地址模型用户有许多:地址和地址属于:用户 现在我想搜索其电子邮件中包含给定术语的用户,或者其中一个用户的地址中包含该术语。因此,假设术语为“jap”,则应返回其电子邮件(如“%jap%”)的任何用户,或其任何地址城市或地址行(如“%jap%”)的任何用户 我可以通过这样一个简单的连接获得用户 users = User.joins('LEFT OUTER JOIN addresses ON users.id=addresses.user_id').wh

我已经为此挣扎了一整天了

这是我的。
用户
模型和
地址
模型
用户
有许多:地址
地址
属于:用户

现在我想搜索其电子邮件中包含给定术语的用户,或者其中一个用户的地址中包含该术语。因此,假设术语为“jap”,则应返回其
电子邮件(如“%jap%”)的任何
用户
,或其任何地址城市或地址行(如“%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.where( addresses.city like '%jap%' OR addresses.address_line like '%jap%')
这给了我想要的用户。我想要的是,对于返回的用户,我还想要那些符合条件的地址

如果在上面我做了

users.first.addresses
它会给我那个用户的所有地址。我知道我可以通过像这样对该用户的地址进行另一次查询来实现

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.where( addresses.city like '%jap%' OR addresses.address_line like '%jap%')
但这不是它应该如何工作的。我已经尝试了include并在谷歌上搜索了一下,但还没有找到解决方案。有人见过这个吗


编辑#1:有许多类似的解决方案,有两个查询,我想要的是一个单一的查询解决方案,因为对我来说,在地址上应用相同的条件两次是没有意义的。

你能在地址模型上使用与以下类似的命名范围吗

named_scope :city_or_line_like, lambda { |str| {
    :conditions => ['conditions here']
}}

这样你就可以做
用户。首先。地址。城市或者像('arg')一样的线。

这和上面的差不多,我已经做了。但我也有两个问题要问。类似于这样的内容:User=User.User\u或\u address\u like('arg'),然后是
users.first.addresses.city\u或\u line\u like('arg')
,我真正想要的是一个匹配的查询,并返回该用户的匹配地址