Undefined метод `default_scoped? ' при доступе к области
Я получаю эту ошибку при доступе к областям.
Вот модель 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
Пожалуйста, помогите мне понять и исправить эту проблему.
Ответы
Ответ 1
Ваш так называемый 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
Ответ 2
Я получил эту ошибку, потому что одна из моих областей возвращала 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, а область действия не имеет эффекта, но все еще цепляется.