2013-07-17 6 views
1

je suivant les modèlescomment compter le nombre d'associations

:order has_many :dishes 
:dish has_and_belongs_to_many :items 

J'ai @orders de collecte, comment je compte le: article?

par exemple. J'ai 3 articles, poulet, boeuf et porc. Et deux plats, d'abord à la fois le poulet et le bœuf, le second a le poulet, le bœuf et le porc. Deux commandes, la première commande contient le plat # 1 et la deuxième commande a deux plats. J'aimerais savoir qu'il y en a 3 pour le bœuf, 3 pour le poulet et 1 pour le porc.

Comment puis-je réaliser cela dans les rails?

+0

Actuellement, ce que je fais est de fusionner tous les éléments associés dans un tableau, puis de trouver l'occurrence de chaque élément unique. Vous cherchez de meilleures méthodes. – user1495133

Répondre

0

question intéressante, je ne connais pas de façons de le faire, je l'espère particulièrement agréable quelqu'un affichera un, mais en attendant, vous pouvez trouver les comptes par itérer éléments uniques et en comptant les occurrences:

items = <gather all the items into one array> 
items.uniq.each do |item| 
    puts item.name 
    puts items.count(item) 
end 

Pour recueillir tous les éléments de l'enfant dans un tableau, il serait mieux si vous aviez une relation :has_many through de sorte que vous pouvez obtenir directement un des éléments de commandes, en sautant les plats:

class Order < ActiveRecord::Base 
    has_many :dishes 
    has_many :items, through => :dishes 
end 

items = @orders.map(&:items).flatten 
+0

merci, c'est ce que j'ai fini par faire avec. Rassemblez tous les éléments en premier, puis découvrez le nombre d'éléments uniques. – user1495133

-1

Cela ne fonctionnerait-il pas?

@beef_orders = @orders.dishes.items.where(:ingredients => "beef").count 
+0

merci pour la réponse. Mais le problème est qu'il y a beaucoup d'articles, pas seulement 3. Je veux quelque chose comme {"beef" => 3, "chicken" => 3, "porc" => 1, ...}. Actuellement, ce que je fais est de fusionner tous les éléments associés dans un tableau, puis de trouver l'occurrence de chaque élément unique. Vous cherchez de meilleures méthodes. – user1495133