2011-12-14 88 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