web-dev-qa-db-fra.com

Grouper et compter en Rails

Je sais que j'ai déjà vu cela auparavant mais je ne trouve rien maintenant. Je souhaite regrouper une requête dans une colonne donnée et pouvoir en afficher le nombre dans chaque groupe. J'ai eu la première partie: 

@line_items = @project.line_items.all(:group => "device_id")  

Ceci est pour ma vue d'index d'élément de campagne, qui est juste un tableau affichant les éléments de campagne. Comment créer une colonne dans cette table pour "compter" maintenant que les éléments de campagne sont regroupés par appareil?

43
tladuke

Vous pouvez faire count sur line_items qui vous retournera un hachage commandé de device_id et count.

@project.line_items.group(:device_id).count
89
Chandra Patni

le hachage de l'id_de_passe en tant que clé et le nombre d'enregistrements associés

@project.line_items.group(:devise_id).count
10
Sandip Ransing

Ajoutez simplement une option :select:

@line_items = @project.line_items.all(
  :group  => "device_id",
  :select => "device_id, COUNT(*) as count"
)

Ensuite, chaque @line_item aura un attribut count.

8
Alex Reisner

quelque chose comme

 User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id")

pourrait aussi fonctionner ...

3
rogerdpack

Je pense que vous pouvez essayer cela aussi.

@project.line_items.group(:device_id).pluck("device_id, count(device_id)")

^^ Ceci donne un tableau de tableaux avec les éléments 'device_id and count'

2
bluefoggy

Pour seulement compter plumer serait plus rapide ici plutôt que groupe

@project.line_items.pluck(:device_id).count


@project.line_items.pluck(:device_id).uniq.count
2
John Smith

Après ce commit:

https://github.com/Rails/rails/commit/a1c05dd8b9bd3623289d3aa73dda2943d620cc34

il y a une nouvelle façon de faire la même chose:

@project.line_items.count(:group => LineItem.arel_table[:device_id])
0
Psylone