Рельсы: список элементов по частоте, включая частоту - PullRequest
0 голосов
/ 10 января 2019

Следующие получат одно сообщение в категории:

Post.group(:category_id).order('count *')

Затем я мог бы показать таблицу репрезентативных сообщений, по одной на категорию, перечислив каждый результат:

CATEGORY | SAMPLE POST ID | SAMPLE POST TITLE
        1        |             123           | How to swim out loud
        2        |             246           | On Hamlet

Тем не менее, я хотел бы включить количество сообщений в этой категории, например ::100100

CATEGORY | AMOUNT | SAMPLE POST ID | SAMPLE POST TITLE
        1        |       5       |            123           | How to swim out loud
        2        |       2       |            246           | On Hamlet

Как мы можем также показать сумму, то есть "количество на группу"? Надеемся, что есть способ извлечь его из результатов «Опубликовать» как часть соответствующего запроса ActiveRecord.

Обратите внимание, что здесь нет таблицы "Category". category_id - это просто независимый столбец. Поэтому counter_cache не возможен.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Вы можете использовать некоторое sql-волшебство (следующее работает с mysql, не тестировалось в postgres, но также должно):

posts = Post.group(:category_id).order('count(*)').select('count(*) as category_cnt, posts.*')
category_count = posts.first.category_cnt
0 голосов
/ 10 января 2019

Я полагаю, ваш Post belongs_to Category.

При этом в rails есть удивительная особенность под названием counter_cache. Проверьте документацию здесь .

class Post < ApplicationRecord
  belongs_to :category, dependent: :destroy, counter_cache: true
end

class Category < ApplicationRecord
  has_many :posts
  # category should have a column called posts_count
end

Теперь, когда вы создаете сообщение, значение posts_count категории будет увеличиваться; когда вы удалите его, он будет уменьшаться.

Что касается вашего списка, вы можете сделать что-то вроде:

Category.order(posts_count: :desc) и получить category.posts.first

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