0
我有我認爲是鏈接兩個範圍(Rails 3.2.5)的簡單問題。Rails 3作用域,組合條件與聚合(總和)結果的錯誤
我有一個名爲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
範圍內的工作,但是這不是很乾。
我在這裏錯過了什麼?
謝謝@Frederick鍾 - 謝謝你的錯誤的解釋,這有助於我瞭解失敗。我也認爲你的解決方案是實用的,你的理由是合乎邏輯的。然而,範圍在AREL中實現並且[在此處記錄](http://guides.rubyonrails.org/active_record_querying.html#calculations),並顯示了一種類似於礦井鏈的情況,用作附加細化。也許我的問題應該是「Rails有沒有正確的方法?」使用總和像'sum'這樣的範圍? – 2012-07-11 18:48:39
我可以在範圍中看到運行計算的示例,但沒有定義作爲計算範圍的示例 – 2012-07-11 18:55:46
是的,顯然它們與常規示波器有點不同。無論如何,您的解決方案几乎與範圍相同。 – 2012-07-11 19:36:50