0

在我的用户模型中:

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 and的内容:includes,但我不知道如何在这种情况下应用它。

请注意,sender 只是 User 类的另一个实例。

4

1 回答 1

4

解决方案是急切加载关联,方法是includes

@messages = current_user.received_messages.includes(:sender)
于 2013-06-22T12:53:09.957 回答