メッセージを送信する会話モデルがありhas_many
ます。私のクエリでは、
@active_conversations = Conversation.includes(:messages)..........
これにより、ほとんどの場合、私の N+1 クエリが解決されました。これが私の問題です:
index.html.erb
<% @active_conversations.each do |conversation| %>
<div class="<%= 'unread' if conversation.has_unread_messages?(current_user) %>">
<span><%= conversation.messages.first.body.truncate(50) %></span>
</div>
<%end%>
会話.rb
def has_unread_messages?(user)
!self.messages.unread.where(:receiver_id => user.id).empty?
end
メッセージ.rb
def self.unread
where("read_at IS NULL")
end
n+1 の問題はありませんconversation.message.body
問題は-if conversation.has_unread_messages?(current_user)
すべての会話に対して、その会話のメッセージが読まれていないかどうかを確認するためにそのクエリを実行しているためです。