Rails:针对has_many关系优化对数据库的查询

时间:2013-06-22 12:43:20

标签: ruby-on-rails database ruby-on-rails-3 performance

在我的用户模型中:

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类的另一个实例。

1 个答案:

答案 0 :(得分:4)

解决方案为eager loading associations,方法为includes

@messages = current_user.received_messages.includes(:sender)