我有这个类和这些方法。
class Purchase < ActiveRecord::Base
belongs_to :user
belongs_to :price
belongs_to :unit_price
scope :today, lambda { joins(:unit_price, :price).
where(:prices => { :date => Date.today },
:unit_prices => { :date => Date.today } ) }
# not working
def total
self.price.sum(:amount) + self.unit_price.sum(:amount)
end
end
当我尝试使用我的范围链时:
<%= current_user.purchases.today.map(&:total) %>
它给我一个[]
的空数组结果。我真的很想这样做。
<%= number_to_currency(current_user.purchases.today.map(&:total)) %>
但这不会发生此错误。
undefined method `to_f' for []:Array
为什么它会变空?
感谢。
答案 0 :(得分:1)
您的today
范围必须将结果集减少为零结果。也就是说,如果current_user
首先有purchases
。您确定Price
的{{1}}实际上是date
吗?你确定Date
上存在:prices
关联(虽然我猜它可能会抛出NoMethodError但如果没有)?
至于你的Purchase
,即使你没有使用空数组,你仍然会尝试将数组转换为浮点数。您需要undefined method to_f for []:Array
您将获得的价格数组,并将其传递给sum
:
number_to_currency