2012-09-11 13 views
16

recibo este error al acceder a los ámbitos.método indefinido `default_scoped? ' al acceder al osciloscopio

Aquí es el modelo AR

class StatisticVariable < ActiveRecord::Base 
    attr_accessible :code, :name 

    has_many :statistic_values 

    scope :logins, where(code: 'logins').first 
    scope :unique_logins, where(code: 'unique_logins').first 
    scope :registrations, where(code: 'registrations').first 

end 

y cuando intento con StatisticVariable.logins o cualesquiera otros ámbitos que da:

NoMethodError: undefined method `default_scoped?' 

Si configuro alcance que el método de la clase entonces funciona perfectamente.

def self.registrations 
    where(code: 'registrations').first 
end 

Por favor, ayúdenme a comprender y corregir este problema.

Respuesta

27

Su llamada scopes no son alcances: no son encadenables.

Supongo que Rails intenta anexar un posible default_scope a su resultado que conduce a la falla.

hacer algo como:

scope :logins, where(code: 'logins') 
    scope :unique_logins, where(code: 'unique_logins') 
    scope :registrations, where(code: 'registrations') 

    def self.login 
    logins.first 
    end 
+0

¡Ah, gracias por esto! Lo obtuve al cambiar el orden 'default_scope ':" foo "' to 'default_scope {{order:" foo "}}'. Se solucionó al cambiarlo a 'default_scope {order (" foo ")}'. –

0

Tengo este error porque uno de mis alcances regresaba self, que asumí que era el objeto relación (no funcionó); al devolver el nil se logró el resultado esperado. por ejemplo:

scope :except_ids, -> ids do 
    if ids.present? 
    ids = ids.split(',') if ids.respond_to?(:split) 
    where('id not in (?)', ids) 
    end 
end 

if ids.present? devuelve falso, la condición devuelve nulo y el alcance no tiene ningún efecto, pero aún puede encadenarse.

Cuestiones relacionadas