我有一个我认为是链接两个范围的简单问题(Rails 3.2.5)。
我有一个名为Point
fieldsamount
和的模型transaction_date
,其中包括。用户在各种活动中获得一定数量的积分,并且它们在使用之前是“可用的”,这是作为交易的一部分发生的,此时transaction_date
会更新,并且不再为空。
所以我有一个这样的范围:
scope :available, where("transaction_date IS NULL OR transaction_date = ''")
它工作得很好,返回了正确的 Point 对象集合。所以我可以
> Point.available
=> [#<Point id: 123, amount: 22, transaction_date: nil >][#<Point id: 456, amount: 33, transaction_date: nil >]
如果我想知道可用积分的总和,我可以
> Point.available.sum("amount")
=> 55
但是,如果我尝试制作另一个范围,例如
scope :available, where("transaction_date IS NULL OR transaction_date = ''")
scope :total_available, available.sum("amount")
我得到错误
NoMethodError: undefined method `default_scoped?' for 22:Fixnum
或者如果我更改范围,那么sum("amount").available
我会收到错误
NoMethodError: undefined method `available' for 55:Fixnum
我也可以:total_available
通过添加定义的条件来使范围工作:available
,但这不是很干燥。
我在这里想念什么?