【发布时间】:2014-09-18 00:33:12
【问题描述】:
我有一个has_many through,需要急切加载的关系。这在 Rails 3.2 中可行吗?我尝试了几种方法来包含关联,但在 facebook_user 对象上调用类别总是对类别进行另一个查询。这是我的 activerecord 关联的简化版本。
class FacebookUser < ActiveRecord::Base
belongs_to :user, touch: true
has_many :user_categories, through: :user
has_many :categories, through: :user_categories
end
class User < ActiveRecord::Base
has_many :user_categories
has_many :categories, through: :user_categories
has_one :facebook_user
end
class UserCategory < ActiveRecord::Base
belongs_to :user
belongs_to :category
end
#single query
FacebookUser.includes( user: :categories).joins(user: :categories).each do |f|
## N+1 query on f.categories
f.categories.first
end
#multi-part query
facebook_user_ids = FacebookUser.where(user_id: [1,2,3]).joins(user: :categories).pluck('facebook_users.id')
FacebookUser.where( id: facebook_user_ids ).includes( user: :categories)
【问题讨论】:
标签: ruby-on-rails-3 activerecord