我被困在这里似乎在网上没有任何答案。演习说:
创建将产品价格复制到订单项中的迁移,并更改购物车模型中的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。
任何人都可以提供帮助吗?
答案 0 :(得分:1)
此错误表示您在price
的某些内容上调用nil
。所以我很确定你的LineItem
之一没有product
。
答案 1 :(得分:0)
我会更特别。在我的情况下,有一个cart_id和product_id是零。
所以我通过
简单清理数据库sqlite> DELETE FROM line_items WHERE id= bad_id";