【发布时间】:2012-07-11 18:18:06
【问题描述】:
我认为链接两个范围(Rails 3.2.5)是一个简单的问题。
我有一个名为Point 的模型,其中包含amount 和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
我还可以通过添加:available 中定义的条件来使:total_available 范围工作,但这不是很干。
我在这里错过了什么?
【问题讨论】:
标签: ruby-on-rails-3 aggregate arel