为什么在rails 3.1范围中使用sum会导致错误?

Nat*_*sos 8 ruby-on-rails ruby-on-rails-3.1

我有这个范围:

scope :total_quantity, sum('quantity')
Run Code Online (Sandbox Code Playgroud)

当我跑:

MyModel.total_quantity
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

NoMethodError: undefined method `default_scoped?' for 4:Fixnum
Run Code Online (Sandbox Code Playgroud)

直接运行sum方法有效

MyModel.sum('quantity') # 4
Run Code Online (Sandbox Code Playgroud)

我在default_scoped上找不到任何文档?方法,或者为什么在这里调用它.你知道是否有办法解决这个问题?

Viv*_*har 12

只需尝试方法而不是范围.它的功能就像魅力我也遇到了同样的问题,但是当我将范围改为方法时,它的工作正常.下面是工作和测试代码:)

def self.total_quantity
 sum('quantity')
end
Run Code Online (Sandbox Code Playgroud)

让我知道它是否有效!谢谢

  • 范围兼容的方法返回一个范围对象,而不是`sum`的情况.您需要将此方法用于返回无法进一步限定的最终值的事物. (11认同)