2015-10-17 15 views
0

我有一個多級模型結構,我試圖創建一個查詢,我可以搜索主父模型或最後一個模型上的屬性在聯想變化中。我的結構如下所示:在多級關聯鏈中的不同模型上的Rails查詢

class Parent 
    attr_accessible :pname 
    has_one :child 
end 

class Child 
    has_many :infos 
end 

class Info 
    has_one :setting 
end 

class Setting 
    has_many :subsettings 
end 

class Subsetting 
    attr_accessible :sname 
end 

我所試圖做的是創造一個地方查詢,在那裏我可以把所有的父母,其中無論是「PNAME = X」或「SNAME = X」。但是,我不確定如何創建深層次的關聯:有沒有辦法使用活動記錄乾淨地完成它,還是直接創建mysql查詢更好?

回答

1

我打字這個寫意,所以這是可能的,這將不會是100%,但你應該能夠做到像下面...

class Parent 
    has_one :child 
    has_many :infos, through: :child 
    has_many :settings, through: infos 
    has_many :subsettings, through: :settings 
    ... 
end 

那麼你應該能夠調用...

Parent.joins(:subsettings).where("parent.pname = ? OR subsetting.sname =?", x) 

有兩點需要注意有關.where()電話:

  1. 因爲你是QUER針對多個連接的表格,您需要在表格名稱前面加上前綴。

  2. 表名是單數,而不是複數。這就是爲什麼subsetting而不是subsettings