我在編寫要在ActiveRecord
對象的集合上使用的類方法時遇到問題。在過去的幾個小時裏,我遇到過兩次這樣的問題,它看起來像一個簡單的問題,所以我知道我錯過了一些東西,但我一直無法在其他地方找到答案。用於收集對象的Rails模型類方法
例子:
class Order < ActiveRecord::Base
belongs_to :customer
scope :month, -> { where('order_date > ?', DateTime.now.beginning_of_month.utc) }
def self.first_order_count
map(&:first_for_customer?).count(true)
end
def first_for_customer?
self == customer.orders.first
# this self == bit seems awkward, but that's a separate question...
end
end
如果我打電話Order.month.first_order_count
,我得到 NoMethodError: undefined method 'map' for #<Class:...
據我所知,這是因爲map
不能直接在Order
調用,但需要一個Enumerable
對象,而不是。如果我撥打Order.year.map(&:first_for_customer?).count(true)
,我會得到理想的結果。
什麼是正確的方式來編寫方法使用的對象集合,但不是直接在類上?
完美!這個訣竅會讓事情變得更容易。我從來沒有意識到我可以在一個關係上調用「全部」,而不僅僅是在課堂上。 – elements
你,先生,是天賜之物。我提交了https://github.com/rails/rails/issues/21943,因爲這是一個誤導性的文檔問題,或者最糟糕的一個錯誤。 – DreadPirateShawn