17

访问范围时出现此错误。

这是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

请指导我了解并解决此问题。

4

2 回答 2

29

您所谓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
于 2012-09-11T07:55:21.863 回答
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,范围无效,但仍可链接。

于 2013-04-10T15:29:10.537 回答