group_by и считать - PullRequest
       1

group_by и считать

4 голосов
/ 08 августа 2011
@entries_by_source = Entry.joins(:training_entries).group("source_id, classification_id, category_id").select("source_id, classification_id, category_id, count(*) as entries_count")

Это в @ entires_by_source

- !ruby/ActiveRecord:Entry 
  attributes: 
    source_id: 1
    classification_id: 1
    category_id: 1
    entries_count: 198
- !ruby/ActiveRecord:Entry 
  attributes: 
    source_id: 1
    classification_id: 1
    category_id: 2
    entries_count: 614
- !ruby/ActiveRecord:Entry 
  attributes: 
    source_id: 2
    classification_id: 1
    category_id: 3
    entries_count: 1

Теперь я пытаюсь напечатать что-то вроде этого:

source_id entries_count
1          812 #sum of entries_count 198 + 614
2          1

Код ниже не работает. Любая помощь будет оценена

<% @entries_by_source.group_by(&:source_id).each do |source_id, entries_count| %>
  <%= source_id %><%= entries_count %>
<% end %>

Ответы [ 2 ]

5 голосов
/ 08 августа 2011

group_by будет возвращать массив, такой как

[{'source_id_1' => [values, ...]}, {'source_id_2' => [values, ...]}]

Вам нужно сложить счет, например:

<% @entries_by_source.group_by(&:source_id).each do |source_id, entries| %>
  <%= source_id %><%= entries.sum(&:entries_count) %>
<% end %>
3 голосов
/ 08 декабря 2013

Действительно хороший пример здесь: http://markusjais.com/the-group_by-method-from-rubys-enumerable-mixin-and-compared-with-scal/

words = ["one", "two", "one", "three", "four", "two", "one"]
count = words.group_by { |w| w }.inject({}) do |tmphash, (k,v)|
      tmphash[k] = v.size
      tmphash
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...