рельсы запрос по количеству на отношение has_many - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть модель, например, Пост, и Пост has_many комментарии. Я хотел бы запрашивать посты в порядке постов с наибольшим количеством комментариев к минимуму. Как я могу сделать это с запросом активной записи?

Сейчас я пытаюсь:

Post.includes(:comments).order('COUNT(comments.post_id) DESC')

но я получаю ошибку:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "comments")

1 Ответ

2 голосов
/ 29 апреля 2019
Post.left_outer_joins(:comments)
    .group(:id) # required by Postgres
    .order(Arel.sql('COUNT(comments.*) DESC')) # https://github.com/rails/rails/issues/32995

Если вы хотите использовать счет в результате, вы также можете выбрать его:

Post.left_outer_joins(:comments)
    .select('posts.*, COUNT(comments.*) AS comment_count')
    .group(:id) # required by Postgres
    .order('comment_count DESC') # Use COUNT(comments.*) in Oracle

Другой способ решить эту проблему - использовать counter_cache .

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