根据具有ActiveRecord中的连接的孙属性选择对象

时间:2014-03-28 18:23:50

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

假设我有以下型号:

class Foo < ActiveRecord::Base
has_many :bars
has_many :bazs, :through => :bars

class Bar < ActiveRecord::Base
belongs_to :foo
has_many :bazs

class Baz < ActiveRecord::Base
belongs_to :bar

假设Baz具有“名称”属性。选择所有Foo的最佳方式是什么,Baz的名字是“x”?

我以为我可以做Foo.join(:baz).where('bazs.name' => 'x')这样的事情,但这似乎不起作用。

2 个答案:

答案 0 :(得分:2)

您可以在声明时包含关系:

Foo.includes(bars: :bazs)

然后你可以在附表上申请你的条件:

Foo.includes(bars: :bazs).where(bars: { title: 'Hey'}, bazs: { id: nil })

由于你已经通过“has_many-through”关系在Foo模型中声明了:bazs,你可以这样做:

Foo.includes(:bazs).where(bazs: { id: 12 })

答案 1 :(得分:2)

这应该有效!

Foo.joins(:bazs).where(bazs: {name: 'x'})