我在访问范围时遇到此错误。
这是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
当我尝试StatisticVariable.logins
或任何其他范围时,它会给出:
NoMethodError: undefined method `default_scoped?'
如果我将范围配置为类方法,那么它可以很好地工作。
def self.registrations
where(code: 'registrations').first
end
请指导我理解并解决此问题。
答案 0 :(得分:28)
您所谓的scopes
不是范围:它们不可链接。
我猜Rails会尝试在您的结果中附加潜在的default_scope
,从而导致失败。
做类似的事情:
scope :logins, where(code: 'logins')
scope :unique_logins, where(code: 'unique_logins')
scope :registrations, where(code: 'registrations')
def self.login
logins.first
end
答案 1 :(得分:0)
我收到此错误是因为我的一个范围正在返回self
,我认为这是关系对象(不起作用);返回nil
取代了预期的结果。例如:
scope :except_ids, -> ids do
if ids.present?
ids = ids.split(',') if ids.respond_to?(:split)
where('id not in (?)', ids)
end
end
如果是ids.present?返回false,条件返回nil,范围无效,但仍可链接。