2010-02-20 13 views
3

J'ai une erreur que je ne trouve pas la solution.Erreur de méthode non définie sur .sum

Quand je lance:

Week.find(1).results.sum('box') 

A obtenir une somme de boîte de colonne d'il fonctionne parfaitement!

Mais quand je demande un filtre en elle:

Week.find(1).results.find(:all, :joins => [:seller],:conditions => ['sellers.user_id = ?', 1]).sum('caixas') 

J'obtiens une erreur NoMethodError: undefined method '+' for #<Result:0x103239e58>

L'objet retourné est le même que je l'imprimer sur la console et ne vois rien de mal.

Quelqu'un en sait quelque chose?

Tks!

Répondre

3

ActiveRecord#sum est une méthode ActiveRecord.

Le premier cas fonctionne car Week.find(1).results renvoie un proxy d'association qui expose les mêmes méthodes de classe Week.

Dans le deuxième cas, vous appelez #sum sur un objet Array, et non un modèle ActiveRecord. Si vous voulez que le second cas fonctionne, vous devez utiliser une portée ou un proxy d'association.

changement

Week.find(1).results.find(:all, :joins => [:seller],:conditions => ['sellers.user_id = ?', 1]).sum('caixas') 

à

Week.find(1).results.scoped(:joins => [:seller], :conditions => ['sellers.user_id = ?', 1]).sum('caixas')