Здесь есть 3 модели:
- проекты
- темы (project_id)
- thread_participations (thread_id, логическое значение)
Прямо сейчас у меня есть список проектов пользователя, и список показывает, сколько потоков непрочитано для каждого проекта. Огромная проблема здесь заключается в том, что если у пользователя есть несколько проектов (что делают все пользователи), это приводит к тому, что БД получает несколько запросов, по одному на проект.
Я хотел бы использовать Rails для создания запроса, который при одном попадании в БД возвращает количество непрочитанных сообщений для каждого проекта пользователя.
Вот что я использую сегодня в представлении:
<% @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})
}
Любые предложения о том, как это сделать? И в какой модели это должно жить? Может быть, модель пользователя, поскольку она не зависит от проекта или потока?
Спасибо