2010-02-09 4 views
1

J'ai deux modèles de préoccupation, "Ordre" et "Kit"; chaque commande has_one :kitEffectuer une somme avec les contrôleurs imbriqués

Chaque "kit" a une valeur "coût". Au sein d'un contrôleur, je veux pouvoir additionner les coûts pour chaque «commande».

Logiquement, je pensais que ce serait logique (mais il ne fonctionne pas):

@revenue = Order.Kit.sum(:cost) 

Toute aide serait appréciée. Merci.


Exemple:

Un utilisateur crée un nouvel ordre pour un kit qui a coûté 20. Je voudrais que le @revenue soit de la valeur donc 20 (reflétant les 'ventes'). Quand quelqu'un d'autre crée une nouvelle commande pour le même kit, @revenue devrait passer à 40.

+0

donc vous dites il y a un champ order_id dans votre modèle de kit? – klochner

Répondre

0

Je suppose que vous l'avez en arrière, et chaque commande a un kit_id.

. . . dans ce cas, vous avez juste besoin le nombre de commandes pour un kit donné, multiplié par le coût du kit:

 
kit = Kit.find(kit_id) 
number_of_orders = Order.count(:all,:conditions=>['kit_id = ?',kit_id]) 
@revenue = kit.cost*number_of_orders 
+0

Cheers - c'est très apprécié! – vectran

1

En supposant que vous n'avez pas deux kits par commande ...

@revenue = Kit.sum(:cost, :conditions => 'order_id is not null') 

remplacement order_id avec votre foreign_key

+0

Merci, mais ce n'est pas ce que je veux faire. Il semble ajouter le coût de tous les kits, mais je veux ajouter tous les coûts des kits de la commande, Commander -> Kit - (coût). J'ai mis à jour la question pour refléter cela. – vectran

1
kit_costs = order.kits.map { |k| k.cost } 
@revenue = kit_costs.inject(0) { |sum, n| sum += n } 
Questions connexes