Rails上的敏捷Web开发。 10.4-未定义的方法`价格'为零:NilClass

时间:2012-10-19 13:35:23

标签: ruby ruby-on-rails-3

我被困在这里似乎在网上没有任何答案。演习说:

创建将产品价格复制到订单项中的迁移,并更改购物车模型中的add_product方法,以便在创建新订单项时捕获价格。

我的代码:

class AddPriceToLineItem < ActiveRecord::Migration
  def self.up
    add_column :line_items, :price, :decimal
    say_with_time "Updating prices..." do
    LineItem.find(:all).each do |li|
      li.update_attribute :price, li.product.price
    end
    end
  end

  def self.down
    remove_column :line_items, :price
  end
end

我也尝试过:

class AddPriceToLineItem < ActiveRecord::Migration
  def self.up
    add_column :line_items, :price, :decimal
    LineItem.all.each do |li|
      li.price = li.product.price
    end
  end

  def self.down
    remove_column :line_items, :price
  end
end

我一直收到这个错误:

 rake db:migrate
==  AddPriceToLineItem: migrating =============================================
-- add_column(:line_items, :price, :decimal)
   -> 0.0010s
-- Updating prices...
rake aborted!
An error has occurred, this and all later migrations canceled:

undefined method `price' for nil:NilClass

奇怪的是它说的是未定义的nil:nilClass,因为价格刚刚在之前的行中定义过。

我使用rails(3.2.1),ruby 1.9.3p125。

任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:1)

此错误表示您在price的某些内容上调用nil。所以我很确定你的LineItem之一没有product

答案 1 :(得分:0)

我会更特别。在我的情况下,有一个cart_id和product_id是零。

所以我通过

简单清理数据库
sqlite> DELETE FROM line_items WHERE id= bad_id";