2012-09-11 5 views
16

bekomme ich diesen Fehler beim Zugriff auf Bereiche.undefinierte Methode `default_scoped? ' Beim Zugriff auf den Bereich

Hier ist AR-Modell

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 

und wenn ich mit StatisticVariable.logins oder anderen Bereichen versuchen, gibt es:

NoMethodError: undefined method `default_scoped?' 

Wenn ich Umfang als Klassenmethode konfigurieren dann perfekt funktioniert.

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

Bitte führen Sie mich, um dieses Problem zu verstehen und zu beheben.

Antwort

27

Ihre so genannten sind keine Bereiche: Sie sind nicht verkettbar.

Ich vermute, dass Rails versucht, ein Potential an Ihr Ergebnis anzuhängen, was zu einem Fehler führt.

Sie so etwas wie:

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, danke dafür! Ich habe das, wenn ich 'default_scope order: "foo" 'zu' default_scope {{order: "foo"}} 'ändere. Es wurde behoben, indem man es in 'default_scope {order (" foo ")}' änderte. –

0

ich diesen Fehler hätte, weil einer meiner Tive self zurückkehrt, die ich die Beziehung Objekt angenommen wurde (nicht funktioniert); die Rückkehr nil erreichte stattdessen das erwartete Ergebnis. zB:

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

wenn ids.present? gibt false zurück, die Bedingung gibt nil zurück und der Bereich hat keine Auswirkung, ist aber immer noch verkettbar.

Verwandte Themen