2011-12-14 91 views
0

找到我的产品型号:的Rails通过嵌套协会

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领域。我怎么能找到模型Model3label

+0

真的你的关系没有意义(不完整),每一个`尝试并更好地解释你之后的关系模型...多对多等... – jondavidjohn 2011-12-14 16:19:50

回答

1

随着 “加入”,你可以根据链接模型

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

这将只在数据库创建过滤结果电话,所以它是非常有效的。但是,从模型到模型3的方式不止一种时,连接可以创建重复项。如果可以的话你需要添加

Model.select("DISTINCT model.*").joins(:model2s => :model3).where('model3.label' => 'label') 
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)

+0

我需要ActiveRelation来分页结果然后 – 2011-12-14 16:21:28