这里有 3 个模型:
- 项目
- 线程(project_id)
- thread_participations(thread_id,读取布尔值)
现在我有一个用户项目的列表,该列表显示每个项目有多少线程未读。这里最大的问题是,如果用户有多个项目(所有用户都这样做),它会导致数据库受到多个查询的影响,每个项目一个。
我想使用 Rails 构建一个查询,通过一个 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})
}
关于如何做到这一点的任何建议?这应该住在哪个模型中?也许是用户的模型,因为它不是项目或线程特定的?
谢谢