2011-09-09 7 views
8

que tienen este alcance:¿por qué el uso de la suma en un alcance de rieles 3.1 da como resultado un error?

scope :total_quantity, sum('quantity') 

Cuando corro:

MyModel.total_quantity 

me sale este error:

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

Ejecutar el método de la suma trabaja directamente

MyModel.sum('quantity') # 4 

No encuentro ninguna documentación sobre default_scoped? método, o por qué se llama aquí. ¿Sabes si hay una manera de solucionar este problema?

Respuesta

12

Simplemente pruebe el método en lugar del alcance. Funciona como un encanto, también enfrenté el mismo problema, pero cuando cambié mi alcance al método funciona bien. A continuación está el código funcionando y probado :)

def self.total_quantity 
sum('quantity') 
end 

¡Avísame si funciona o no! Gracias

+11

Los métodos compatibles con el alcance devuelven un objeto con ámbito, no un número como en el caso de 'sum'. Debe usar este enfoque con cosas que devuelvan un valor final que no se puede ampliar. – tadman

+0

¡Impresionante, funcionó! Gracias. –

+0

También tuve el mismo problema cuando traté de encontrar el recuento de objetos a través del alcance. Ahora está claro, gracias tadman – Abhi

-1

Esto funcionó para mí

def self.total_quantity 
sum('quantity') 
end 

Pero no tuve razón de un error si utiliza el alcance en lugar de método.

Cuestiones relacionadas