Rails соединяет вложенную таблицу с условием и предотвращает N + 1 запрос - PullRequest
0 голосов
/ 02 февраля 2020

Модели просто User и Review. Отношения: User имеет много Reviews. Я хочу выяснить, у какого пользователя более 2 отзывов.

Я написал это, и оно работает.

User.joins(:reviews).group(:id).having("COUNT('reviews.id') > 2")

Затем я хочу обернуть их и вернуть пользователям id, first_name и обзор title. Поэтому я попробовал следующее, но выбросил проблему с запросом N + 1.

User.select(:id,:first_name)
    .joins(:reviews).group(:id)
    .having("COUNT('reviews.id') > 2")
    .as_json(include: {reviews: {only: :title}})

Просто заменить joins на includes, кажется, не работает, есть ли способ решить стремительную загрузку с group, having состояние?

1 Ответ

0 голосов
/ 03 февраля 2020

Попробуйте это:

User.select(:id, :first_name).left_joins(: reviews).includes(: reviews).group(:id).having("COUNT('reviews.id') > 2")

Это работает для меня, однако я не знаю, что такое .as_json(include: {items: {only: :title}}), и если это будет работать с .as_json(include: {items: {only: :title}})

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