85 votes

Regrouper et compter dans Rails

Je sais que j'ai déjà vu ça, mais je ne trouve rien maintenant. Je veux regrouper une requête par une certaine colonne et être en mesure d'afficher combien sont dans chaque groupe. J'ai obtenu la première partie vers le bas :

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

Ceci est pour ma vue d'index d'élément de ligne, qui est juste un tableau affichant les éléments de ligne. Comment faire une colonne dans ce tableau pour "compter" maintenant que les éléments de ligne sont regroupés par périphérique ?

159voto

Chandra Patni Points 9432

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

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

22voto

Sandip Ransing Points 2344

hash de devise_id comme clé et enregistrements associés comptent

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

11voto

bluefoggy Points 761

Je pense que tu peux essayer ça aussi.

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

^^ Cela donne un tableau de tableaux avec les éléments 'device_id et count'

10voto

Alex Reisner Points 10026

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.

4voto

rogerdpack Points 12806

quelque chose comme

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

pourrait également fonctionner...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X