1

メッセージを送信する会話モデルがあり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)すべての会話に対して、その会話のメッセージが読まれていないかどうかを確認するためにそのクエリを実行しているためです。

4

1 に答える 1