方法带回空数组

时间:2012-08-17 17:46:15

标签: ruby-on-rails ruby ruby-on-rails-3

我有这个类和这些方法。

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

为什么它会变空?

感谢。

1 个答案:

答案 0 :(得分:1)

您的today范围必须将结果集减少为零结果。也就是说,如果current_user首先有purchases。您确定Price的{​​{1}}实际上是date吗?你确定Date上存在:prices关联(虽然我猜它可能会抛出NoMethodError但如果没有)?

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

number_to_currency