2011-09-09 2 views
8

Ho questo ambito:perché l'utilizzo della somma in un binario di rotaie 3.1 genera un errore?

scope :total_quantity, sum('quantity') 

Quando eseguo:

MyModel.total_quantity 

ottengo questo errore:

NoMethodError: undefined method `default_scoped?' for 4:Fixnum 

L'esecuzione del metodo della somma lavora direttamente

MyModel.sum('quantity') # 4 

Non riesco a trovare alcuna documentazione su default_scoped? metodo, o perché viene chiamato qui. Sai se esiste un modo per risolvere questo problema?

risposta

12

Basta provare il metodo anziché l'ambito. Funziona come un fascino anche io ho affrontato uno stesso problema, ma quando ho cambiato il mio scope al metodo funziona bene. Qui di seguito sta lavorando e testato il codice :)

def self.total_quantity 
sum('quantity') 
end 

Fatemi sapere se funziona o no! Grazie

+11

I metodi compatibili con lo scope restituiscono un oggetto con scope, non un numero come nel caso di 'sum'. È necessario utilizzare questo approccio con elementi che restituiscono un valore finale che non può essere ulteriormente definito. – tadman

+0

Fantastico, ha funzionato! Grazie. –

+0

Ho anche avuto lo stesso problema in cui ho cercato di trovare il conteggio degli oggetti tramite scope. Ora è chiaro, grazie Tadman – Abhi

-1

questo ha lavorato per me

def self.total_quantity 
sum('quantity') 
end 

Ma non ho avuto motivo di un errore se I utilizza portata al posto di metodo.