2012-05-04 72 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

相關問題