Rails在多级关联链中查询不同模型

时间:2015-10-17 17:57:56

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

我有一个多级模型结构,我正在尝试创建一个查询,我可以在其中搜索主要父模型上的属性,或者在关联更改中搜索最后一个模型。我的结构如下所示:

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查询更好?

1 个答案:

答案 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()电话的两点注意事项:

  1. 因为您要查询多个连接表,所以需要在列前加上表名。

  2. 表名是单数,而不是复数。这就是subsetting而非subsettings

  3. 的原因