Ruby Rails 3集合'sum'失败,出现TypeError

Ruby Rails 3集合'sum'失败,出现TypeError,ruby,ruby-on-rails-3.2,Ruby,Ruby On Rails 3.2,在示例Rails 3.2.8应用程序(在Ruby 1.9.3上)中,有以下简单设置: class Account < ActiveRecord::Base has_many :line_items def subtotal line_items.sum(&:price) end end class Line_Item < ActiveRecord::Base belongs_to :product def price product.

在示例Rails 3.2.8应用程序(在Ruby 1.9.3上)中,有以下简单设置:

class Account < ActiveRecord::Base
  has_many :line_items

  def subtotal
    line_items.sum(&:price)
  end
end

class Line_Item < ActiveRecord::Base
  belongs_to :product

  def price
    product.price * time
  end
end


account = Account.new

account.line_items.build do |item|
  item.years = 4
  item.product = Product.last
end

account.subtotal
#=> TypeError: nil can't be coerced into BigDecimal

为什么
line\u items.sum(&:price)
的初始定义失败了?

这似乎是Rails中的一个缺陷(至少在3.2.8中)

在Rails 3.2.8中,
有许多关联是动态定义的。
虽然这并没有反映在
或它在“集合关联(一对多/多对多)”下的列表中简要列出
图表,但未再次引用

根据,它将始终尝试使用SQL
sum
命中数据库。 但是,在此特定实例中,不会保存模型。所以什么都没有 在数据库中

所以要澄清一点:

account.line_items.sum(&:price)      # Uses Collection#sum, goes to database
account.line_items.map.sum(&:price)  # Uses Enumerable#map then Enumerable#sum

这已被记录在;这似乎与。

价格返回的类型(类别)有关?行项目[0]。price.class?奇怪。我运行1.9.3和Rails 3.2.1,但它运行得很好。您确定所有记录都返回相同的类吗?也许循环一下价格,然后检查每个类。当我测试时,集合中只有一个项目。
account.line_items.sum(&:price)      # Uses Collection#sum, goes to database
account.line_items.map.sum(&:price)  # Uses Enumerable#map then Enumerable#sum