我可以使用activerecord关系来查找嵌套属性吗?

时间:2012-05-04 01:23:56

标签: ruby ruby-on-rails-3 activerecord

对不起,如果我的问题措辞不好。我很难表达得很好。让我们在代码中试一试!

我有一个拥有多个项目的客户端模型。如果我有这样生成的ActiveRecord关系;

clients = Client.where(':sign_up_time < ?', Time.now)

我希望获得属于此关系中返回的客户的所有项目的列表,我该如何处理?我可以很容易地在Ruby中完成它并获得一系列项目返回,例如

projects = clients.inject([]) {|proj,cli| proj << cli.projects}.flatten

这绝对没问题,但我认为在ActiveRecord中可能有一个很好的干净方法。

重要的是我想使用clients对象作为我的起点。

2 个答案:

答案 0 :(得分:3)

我相信你想要的是一个加入,阅读所有相关内容:

http://guides.rubyonrails.org/active_record_querying.html#joining-tables

Project.joins(:clients).where(:clients=>'sign_up_time < ?', Time.now)

答案 1 :(得分:2)

这不是真正的ActiveRecord,但执行以下操作有点像这样的习惯用法:

projects = Client.where(':sign_up_time < ?', Time.now).map(&:projects).flatten

这与你所拥有的几乎完全相同,但写得更清晰。不过你也可以这样做:

clients = Client.where(':sign_up_time < ?', Time.now)
projects = Project.where(:client_id => clients)

这导致projectsActiveRecord::Relation而不是数组,这可能更有用。它也是一种更加面向SQL的方法,可以更快。