2012-09-11 24 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.

Các vấn đề liên quan