2014-02-06 41 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,谢谢。 –