2014-02-06 38 views
0

我有模型A,B,C,D。一個模型有多個記錄的B,B的C和C的D. D如何在下面搜索多個模型的記錄?

我想知道是否有什麼辦法可以從A到D以比從A到B更清潔的方式...遞歸到D,製作龐大而沉重的代碼。

我在想,如果它可能寫出像

aa = A.something 
if aa.bs.cs.ds.where(:status=>1).any? 
... 

我不知道這更好的,所以也許誤導...

回答

1

當然,使用怎樣的標題有一對多透:

class A < ActiveRecord::Base 
    has_many :bs 
    has_many :cs, :through => :bs 
    has_many :ds, :through => :cs 
end 

class B < ActiveRecord::Base 
    belongs_to :a 
    has_many :cs 
end 

class C < ActiveRecord::Base 
    belongs_to :b 
    has_many :ds 
end 

class D < ActiveRecord::Base 
    belongs_to :c 
end 

現在,你可以通過調用得到所有ds的一個a(每個d的狀態過濾):

a.ds.where(status: 1) 

你可以叫exist?或任何查詢API調用的,你會在任何ActiveRelation對象。請注意,所有這些都假設您正在嘗試使用與單個a記錄相關的ds。如果您正在處理一組a記錄(例如範圍內的ActiveRelation),則需要採取稍微不同的方法來獲取結果 - 如果這是您需要的,請告訴我。

+0

它是exacly,謝謝。 –