Eager Load with #includes两个级别或更深

时间:2015-10-28 15:26:17

标签: ruby-on-rails ruby

如何加载includes深度超过一个级别?渴望加载一级深度是直截了当的:

例如:

@blogs = Blog.all.includes(:user)

鉴于每个blogbelongs_to的关联user。因此:每个blog记录都有一个user_id属性。

现在:如果user与来自belongs_to的{​​{1}}有city关联,该怎么办?因此:每个user记录都有一个city_id属性。

我想做的是

  • 抓住所有blogs
  • 急切加载关联的userincludes
  • 急切加载博客的city,这是通过博客相关的user抓取的。 (也许这可以通过includes来完成,但我不知道语法。

以下是模型:

# app/models/blog.rb
class Blog < ActiveRecord::Base
  belongs_to :user
end

# app/models/user.rb
class User < ActiveRecord::Base
  has_many :blogs
  belongs_to :city
end

# app/models/city.rb
class City < ActiveRecord::Base
  has_many :users
end

1 个答案:

答案 0 :(得分:4)

使用哈希语法显示嵌套包含

@blogs = Blog.all.includes(:user => :city)

您可以在ActiveRecord Query Interface guide

中详细了解它