0

我被困在这里,似乎在线任何地方都没有答案。练习说:

创建将产品价格复制到行项目的迁移,并更改购物车模型中的 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

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

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

任何人都可以帮忙吗?

4

2 回答 2

1

这个错误意味着你正在调用price的东西是nil. 所以我很确定你的一个LineItem没有product.

于 2012-10-19T13:39:09.310 回答
0

我会更具体。在我的情况下,a 有一个 cart_id 和 product_id 为零。

所以我简单地清理了数据库

sqlite> DELETE FROM line_items WHERE id= bad_id";
于 2012-10-23T13:03:43.950 回答