假设我有以下型号:
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')
这样的事情,但这似乎不起作用。
答案 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'})