我有模特A,B,C,D。模型有多个B的B,B和C的C记录。
我想知道是否有任何方法可以从A到D以更清晰的方式从A到B ...再次递归到D,制作庞大而繁重的代码。
我想知道是否可以编写类似
的内容aa = A.something
if aa.bs.cs.ds.where(:status=>1).any?
...
我不知道如何更好地标题,所以可能会产生误导......
答案 0 :(得分:1)
当然,请使用has-many-through:
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)
您可以像调用任何ActiveRelation对象一样调用exist?
或任何查询API调用。请注意,所有这些都假定您正在尝试处理与单 ds
记录相关的a
。如果您正在处理a
记录的集合(例如范围的ActiveRelation),则需要采用稍微不同的方法来获得结果 - 如果这是您需要的,请告诉我。