ここに 3 つのモデルがあります。
- プロジェクト
- スレッド (project_id)
- thread_participations (thread_id、ブール値を読み取る)
現在、ユーザーのプロジェクトのリストがあり、リストには、プロジェクトごとに未読のスレッドがいくつあるかが示されています。ここでの大きな問題は、ユーザーが複数のプロジェクトを持っている場合 (すべてのユーザーがそうです)、プロジェクトごとに 1 つずつ、複数のクエリで DB がヒットすることです。
Rails を使用して、1 つの DB ヒットでユーザーのプロジェクトごとに未読数を返すクエリを作成したいと考えています。
ビューで今日使用するものは次のとおりです。
<% @projects.each_with_index do |project, i| %>
<%=project %>: <%= Thread.unread(current_user,project).count %>
<% end %>
そしてスレッドモデルで:
scope :unread, lambda { |user,project|
includes(:project,:thread_participations).where(:project_id => project.id, :thread_participations => {:read => false, :user_id => user.id})
}
これを行う方法に関する提案はありますか?また、これはどのモデルに住むべきですか?プロジェクトまたはスレッド固有ではないため、おそらくユーザーのモデルですか?
ありがとう