Rails通过嵌套关联找到

时间:2011-12-14 15:53:02

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

我有模特:

class Model < ActiveRecord::Base
  has_many :model2
end
class Model2 < ActiveRecord::Base
  belongs_to :model
  belongs_to :model3
end
class Model3 < ActiveRecord::Base
  has_many :model2
end

Model3在db label中有字段。我如何通过Model3 label找到模型?

2 个答案:

答案 0 :(得分:4)

首先:你遗失了协会:

class Model < ActiveRecord::Base
  has_many :model2
end
class Model2 < ActiveRecord::Base
  belongs_to :model
  belongs_to :model3
end
class Model3 < ActiveRecord::Base
  has_many (or has_one?) :model2
end

然后Model3.where(:label => 'label').map(&:model2).map(&:model)

答案 1 :(得分:1)

使用“联接”,您可以根据链接的模型过滤结果

Model.joins(:model2s => :model3).where('model3.label' => 'label')

这将仅在db调用时创建,因此它非常有效。但是,当从模型到模型3有多种方式时,连接可以创建重复项。如果可以,那么您需要添加

Model.select("DISTINCT model.*").joins(:model2s => :model3).where('model3.label' => 'label')