【发布时间】:2011-05-08 20:45:39
【问题描述】:
所有用于急切加载的 :include 示例都是用于类级别的查询。我在我的模型实例上尝试了它,但它仍然发出一堆查询 - 它是否适用于实例方法?
#in controller
@emails = person.sent_emails(:include => [:recipient])
#in view
render @emails
# _email.html.erb partial
<h1><%= email.recipient.name %></h1>
<p>
<%= email.content %>
</p>
#still issues a select * for emails, N+1 for recipients :/
【问题讨论】:
-
部分
_email里面是什么? -
已将其添加到问题中
-
如果收件人没有急切加载,
email.recipient调用应该运行select * from users。你确定你看到select * from emails多次吗? -
select * from emails 发生一次,然后 select * from people where id = :recipient_id N 次
标签: ruby-on-rails activerecord eager-loading