如何在下面搜索多个模型的记录?

时间:2014-02-06 15:12:25

标签: ruby-on-rails activerecord ruby-on-rails-3.1

我有模特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?
 ...

我不知道如何更好地标题,所以可能会产生误导......

1 个答案:

答案 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),则需要采用稍微不同的方法来获得结果 - 如果这是您需要的,请告诉我。