Как посчитать группу по строкам в рельсах? - PullRequest
25 голосов
/ 30 октября 2009

Когда я использую User.count(:all, :group => "name"), я получаю несколько строк, но это не то, что я хочу. То, что я хочу, это количество строк. Как я могу получить это?

Ответы [ 4 ]

30 голосов
/ 18 марта 2014

В настоящее время (18.03.2014 - Rails 4.0.3) это правильный синтаксис:

Model.group("field_name").count

Возвращает хеш со значениями в качестве значений. например,

SurveyReport.find(30).reports.group("status").count

#=> {
  "pdf_generated" => 56
}
25 голосов
/ 30 октября 2009
  1. User.count выдаст вам общее количество пользователей и переведет на следующий SQL: SELECT count(*) AS count_all FROM "users"
  2. User.count(:all, :group => 'name') выдаст вам список уникальных имен вместе с их количеством и переведет на этот SQL: SELECT count(*) AS count_all, name AS name FROM "users" GROUP BY name

Я подозреваю, что вы хотите вариант 1 выше, но я не понимаю, что именно вы хотите / нужно.

12 голосов
/ 31 октября 2009

Возможно, вы хотите посчитать отличное имя пользователя?

User.count(:name, :distinct => true)

вернет 3, если у вас есть пользователь с именем Джон, Джон, Джейн, Джо (например) в базе данных.

 ________
| name   |
|--------|
| John   |
| John   |
| Jane   |
| Joey   |
|________|
5 голосов
/ 30 октября 2009

Попробуйте использовать User.find (: all,: group => "name"). Count

Удачи!

...