我有一个多级模型结构,我正在尝试创建一个查询,我可以在其中搜索主要父模型上的属性,或者在关联更改中搜索最后一个模型。我的结构如下所示:
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
我要做的是创建一个where查询,在那里我可以拉出所有父母,其中“pname = X”或“sname = X”。但是,我不确定如何创建深层次的关联:有没有办法可以使用活动记录干净利落地完成它,还是直接创建mysql查询更好?
答案 0 :(得分: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()
电话的两点注意事项:
因为您要查询多个连接表,所以需要在列前加上表名。
表名是单数,而不是复数。这就是subsetting
而非subsettings
。