In имеют 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})
}
Есть предложения, как это сделать?Кроме того, в какой модели это должно жить?Может быть, модель пользователя, поскольку она не зависит от проекта или потока?
Спасибо