2012-05-04 138 views
0

很抱歉,如果我的问题措辞不佳。我努力表达得很好。让我们在代码中尝试它!我可以使用activerecord关系来查找嵌套属性吗?

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

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

,我想所有属于客户项目的列表在这种关系中回来后,我会怎么做呢?我可以很容易地在Ruby中完成,并返回一系列项目,例如

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

这是绝对好,但我认为这可能是一个很好的干净的方式在ActiveRecord这样做。

重要的是我想用clients对象作为我的出发点。

回答

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) 

这导致projects作为一个ActiveRecord::Relation而不是一个阵列,从而可以更有效。这也是一个更加面向SQL的方法,可以更快。

+0

这是清洁红宝石至少,我真的很喜欢让一个ActiveRecord ::关系出了第二个版本。我认为这就是我所追求的。谢谢。 – brad

相关问题