【发布时间】:2012-05-03 21:38:24
【问题描述】:
假设我有一个包含许多成员和许多任务的项目模型。
class Project < ActiveRecord::Base
has_many :memberships
has_many :members, :through => :memberships, :class_name => 'User'
has_many :tasks
end
在项目中创建任务时,我们会记录哪个用户创建了它。只有属于当前项目成员的用户才可以
class Task < ActiveRecord::Base
belongs_to :creator, :class_name => 'User'
belongs_to :project
end
在我的projects#show 操作中,我想找到一个项目并将其与它的成员、任务及其创建者一起显示。我尝试急切地加载这些东西以加快查询速度。
由于我急于加载搜索成员,并且任务只能有一个创建者是成员,我是否认为我不必专门包括任务的创建者?
换句话说,我可以这样做吗:
Search.includes(:members, :tasks)
或者我应该这样做:
Search.includes(:members, :tasks => :creator)
【问题讨论】:
-
我认为您需要明确包含 :creator 否则它会在您访问创建者时查询它,因为 Rails 无法知道创建者是已经查询的成员之一。跨度>
-
@Abid 看起来你是对的。如果您想将您的评论移到答案中,我会接受。
标签: ruby-on-rails activerecord ruby-on-rails-3.1 eager-loading