Ответ 1
Вы можете сделать count
на line_items
, который вернет вам упорядоченный хэш device_id
и count
.
@project.line_items.group(:device_id).count
Я знаю, что видел это раньше, но я ничего не могу найти сейчас. Я хочу группировать запрос по определенному столбцу и иметь возможность отображать, сколько из них находится в каждой группе. Я получил первую часть:
@line_items = @project.line_items.all(:group => "device_id")
Это для моего индексного представления позиции, который является только таблицей, отображающей позиции. Как сделать столбец в этой таблице для "подсчета" теперь, когда позиции группируются устройством?
Вы можете сделать count
на line_items
, который вернет вам упорядоченный хэш device_id
и count
.
@project.line_items.group(:device_id).count
hash из devise_id как количество ключей и связанных записей
@project.line_items.group(:devise_id).count
Просто добавьте параметр :select
:
@line_items = @project.line_items.all(
:group => "device_id",
:select => "device_id, COUNT(*) as count"
)
Тогда каждый @line_item
будет иметь атрибут count
.
что-то вроде
User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id")
также может работать...
После этого commit:
https://github.com/rails/rails/commit/a1c05dd8b9bd3623289d3aa73dda2943d620cc34
есть новый способ сделать то же самое:
@project.line_items.count(:group => LineItem.arel_table[:device_id])
Только для count pluck будет быстрее, чем group
@project.line_items.pluck(:device_id).count
@project.line_items.pluck(:device_id).uniq.count