Как сгруппировать, а затем подсчитать записи в базе данных, чтобы показать в представлении - PullRequest
0 голосов
/ 26 июня 2019

Я новичок в рельсах и рубине! У меня есть база данных с записями о статьях. Каждая статья имеет следующие поля: - Титл - автор - корпус

Я бы хотел отобразить на странице index список всех ВСЕХ статей с таким же «заголовком» и тем же «автором». Пример:

База данных:

tittle: "dogs", author: "john", body: "dogs are nice",
tittle: "cats", author: "john", body: "cats are nice",
tittle: "dogs", author: "Lisa", body: "dogs are bad",
tittle: "dogs", author: "john", body: "dogs are nice",
tittle: "dogs", author: "john", body: "dogs are nice",
tittle: "dogs", author: "Lisa", body: "dogs are bad"

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

Articles:
  tittle  Author  how many times

- "dogs"  "john"      3 
- "dogs"  "Lisa"      2
- "cats"  "Lisa"      1

Я думал о перечислимом: 'group_by' или запрос Article.select([:id, :name])? однако я не знаю, как применить его к моему коду.

В настоящее время мой контроллер выглядит так:

  def index
    @articles = Article.order(created_at: :desc)
  end

Я был бы очень признателен за идеи или решения о том, как решить эту проблему как можно более безболезненно, и продолжаю учиться на этом.

1 Ответ

0 голосов
/ 26 июня 2019

Попробуйте этот запрос:

@articles = Article.group(:tittle, :author).count

Он вернет вам хеш-код:

{ [tittle, author] => count, ... }

И вы можете повторить его так:

@articles.each do |(tittle, author), count|
  ...
end

Кроме того, .order(created_at: :desc) part является избыточным, и я предполагаю, что в названии столбца tittle есть опечатка.Я бы переименовал его

Ref https://stackoverflow.com/a/2022424/4950680

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