Rails使用includes和嵌套的belongs_to来加载

时间:2013-10-21 17:26:54

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

说我有三种型号:

class Foo < ActiveRecord::Base
  has_many :things
end

class Thing < ActiveRecord::Base
  belongs_to :foo
  belongs_to :other_thing
end

class OtherThing
  has_many :things
end

我如何从Foo和急切加载OtherThing开始:

Foo.includes([:things => [:other_things]})

我搜索过但找不到任何东西。

由于

1 个答案:

答案 0 :(得分:5)

包含和连接使用与您定义的关系相同的语法:

Foo.includes(:things => :other_thing)

会工作,因为:

Foo has_many :things
                   ^
Thing belongs_to :other_thing
                            ^^

但请记住,在where子句中,始终使用复数版本:

Foo.includes(:things => :other_thing).where(other_things: { name: 'Bobby' })
                                   ^^                 ^^