2012-09-11 10 views
16

Tôi gặp phải lỗi này khi truy cập phạm vi.phương thức chưa xác định `default_scoped? ' khi truy cập phạm vi

Đây là AR model

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 

và khi tôi thử với StatisticVariable.logins hoặc bất kỳ phạm vi khác nó mang lại:

NoMethodError: undefined method `default_scoped?' 

Nếu tôi cấu hình phạm vi như phương pháp lớp sau đó nó hoạt động hoàn hảo.

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

Vui lòng hướng dẫn tôi hiểu và khắc phục vấn đề này.

Trả lời

27

Cái gọi là scopes của bạn không phải là phạm vi: chúng không thể chuỗi.

Tôi đoán Rails sẽ cố gắng thêm một số điện thoại default_scope vào kết quả của bạn dẫn đến lỗi.

Đừng cái gì đó như:

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, cảm ơn vì điều này! Tôi nhận được điều này khi thay đổi 'default_scope order:" foo "' thành 'default_scope {{order:" foo "}}'. Sửa lỗi bằng cách thay đổi nó thành 'default_scope {order (" foo ")}'. –

0

tôi đã nhận lỗi này vì một trong phạm vi của tôi đã trở self, mà tôi giả định được các đối tượng liên quan (không làm việc); trả lại nil thay vì đạt được kết quả mong đợi. ví dụ:

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

nếu ids.present? trả về false, điều kiện trả về nil và phạm vi không có hiệu lực, nhưng vẫn có thể chainable.