在我的用户模型中:
class User < ActiveRecord::Base
has_many :received_messages
:foreign_key => 'recipient_id
end
在我的消息控制器的索引操作中,我有:
@messages = current_user.received_messages
在我看来(实际代码的较短版本):
<% @messages.each do |message| %>
<%= message.sender.full_name %><br>
<%= truncate(message.body, :length => 50) %>
<%end%>
问题是,对于每条消息,它都会在数据库中查询消息发送方。因此,如果有20条消息,它将向数据库发送20个请求。我该如何避免?我一直在阅读Eager loading和:includes
,但我不知道如何在这个例子中应用它。
请注意,sender只是User类的另一个实例。
答案 0 :(得分:4)
解决方案为eager loading associations,方法为includes
:
@messages = current_user.received_messages.includes(:sender)