Как работать с модельными запросами с ограничениями, связанными с несколькими связанными моделями - PullRequest
0 голосов
/ 30 мая 2018

Я создаю приложение, подобное CMS, в котором User has_many Report, которые принадлежат_100 * *.Существует также модель Deadline между User и Account.

. Сейчас я создаю панель управления, на которой я хочу показать обзор учетных записей, для которых пользователь создал отчеты.в последние несколько дней.Чтобы усложнить ситуацию, я также хотел бы показать учетные записи, для которых у пользователя есть сроки исполнения.

Мой первый подход - создание метода экземпляра для модели User:

  def recent_accounts
    # find the accounts which where reported on the last 24 hours
    accounts = reports.where('date > ?', 24.hours.ago).select(:account_id).map(&:account_id).uniq
    dl = user_deadlines.all.select(:account_id).map(&:account_id).uniq
    Account.includes(:past_deadlines, :deadlines).find((accounts+dl).compact)
  end

Пока это работаетНе кажется, что это правильно.Поскольку речь идет об учетных записях, я думаю, что я должен преобразовать это в модель учетной записи.Это правильное предположение?

Я думал о том, чтобы создать для этого условную область, но я пытаюсь найти способ извлечения как информации из отчета, так и из срока исполнения.

Я читал об использовании merge и joins, но не могу по-настоящему осмыслить решение.Любая помощь очень ценится.

1 Ответ

0 голосов
/ 31 мая 2018

Денормализовать.Держите last_report_created_at и deadline флаг на Account.Или у учетной записи могут быть сроки от нескольких пользователей?Обновлять эти значения несложно по сравнению с ростом производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...