0

我有这个类和里面的这些方法。

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) %>

它给了我一个空的 Array 结果[]。我真的很想这样做。

<%= number_to_currency(current_user.purchases.today.map(&:total)) %>

但这对于发生此错误也不起作用。

undefined method `to_f' for []:Array

为什么它会空着回来?

谢谢。

4

1 回答 1

1

您的today范围必须将结果集减少到零结果。也就是说,如果current_user有的话purchases。你确定 aPrice真的date是 aDate吗?您确定该:prices关联存在Purchase(尽管我猜如果没有,它可能会在那里抛出 NoMethodError )?

至于您的undefined method to_f for []:Array,即使您没有使用空数组,您仍然会尝试将数组转换为浮点数。您将需要获得sum的价格数组,并将其传递给number_to_currency

number_to_currency(current_user.purchases.today.map(&:total).sum)
于 2012-08-17T18:01:59.793 回答