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?
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
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
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
.
quelque chose comme
User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id")
pourrait aussi fonctionner ...
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'
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
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])