私は、2つのスコープ(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
:total_available
で定義された条件を追加することでスコープを機能させることもできます:available
が、それはあまり乾燥していません。
ここで何が欠けていますか?