Undefined метод `default_scoped? ' при доступе к области - программирование
Подтвердить что ты не робот

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

Пожалуйста, помогите мне понять и исправить эту проблему.

4b9b3361

Ответ 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, а область действия не имеет эффекта, но все еще цепляется.