问题
I am getting this error while accessing scopes.
Here is 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
and when I try with StatisticVariable.logins or any other scopes it gives:
NoMethodError: undefined method `default_scoped?'
If I configure scope as class method then it works perfectly.
def self.registrations
where(code: 'registrations').first
end
Please guide me to understand and fix this problem.
回答1:
Your so called scopes are not scopes: they aren't chainable.
I guess Rails tries to append a potential default_scope to your result which leads to failure.
Do something like:
scope :logins, where(code: 'logins')
scope :unique_logins, where(code: 'unique_logins')
scope :registrations, where(code: 'registrations')
def self.login
logins.first
end
回答2:
I got this error because one of my scopes was returning self, which I assumed was the relation object (didn't work); returning nil instead achieved the expected result. eg:
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? returns false, the condition returns nil and the scope has no effect, but is still chainable.
来源:https://stackoverflow.com/questions/12365128/undefined-method-default-scoped-while-accessing-scope