2010-02-17 7 views
1

Je ne trouve pas de très bonnes intros pour les rappels spécifiques dans les rails.Rappels dans Rails

Fondamentalement, je suis face à deux modèles:

  1. Ordre
  2. Point, (imbriqué sous forme de commande)

J'utilise le modèle de before_update faire quelques calculs de base:

class Order < ActiveRecord::Base 
     accepts_nested_attributes_for :line_items 
     before_update :do_math 
protected 
def do_math 
    self.req_total = self.line_items.sum(:total_price) 
end 

req_total est la valeur totale de la commande, lorsqu'un utilisateur met à jour les montants dont j'ai besoin d'ajouter le prix total des lignes_lignes. Qu'est-ce que je fais mal? Ma logique ne parvient pas à lire le total_price nouvellement soumis.

Merci!

+1

Probablement préférable si vous présentez ce qui ne va pas –

+0

Le code ci-dessus produit l'ancienne somme des total_prices, pas le total_price modifié du formulaire soumis par l'utilisateur. Je pense qu'il fait une requête Sql sur total_price, j'essaie maintenant de suivre certaines des suggestions ci-dessous. –

+0

L'appel line_items.sum retournera en effet dans la base de données. "sum" est une méthode ActiveRecord ... besoin de regarder en utilisant les valeurs du tableau directement et votre propre algorithme de somme en utilisant le tableau ou les méthodes énumérables. –

Répondre

0

Regardez votre journal. La méthode sum fait une somme SQL à partir de la base de données. Dans ce cas, il se peut que cela ne fonctionne pas puisque les membres du modèle enfant (line_items) n'ont peut-être pas encore été enregistrés dans la base de données.

Comme alternative, essayez

self.req_total = 0 
line_items.each{|item|self.req_total += item.total_price} 

ps. La méthode sum pour les associations ActiveRecord n'est pas la même méthode sum que pour les énumérables, les tableaux réguliers, etc. La méthode sum ActiveRecord est en réalité la méthode calculate (: sum).

0

Vous n'êtes pas sûr de votre utilisation de sum - ressemble à votre tentative d'utiliser SQL lorsque vous parlez Ruby!

Essayez How to sum array of numbers in Ruby?

Hope that helps :)