我有一个可以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)
因为对于每个对话,它都在运行该查询以检查该对话中的消息是否未被阅读。