我正在使用 rails 4th edition (rails 3.2+) 进行敏捷 Web 开发,并且有一个关于 migraitons 的问题。有一个练习,我必须在现有表中添加一列,然后用值更新该新列。我需要在 'line_items' 表中添加一个 'price' 列。首先我生成了迁移:
rails generate migration add_price_to_line_items price:decimal
然后我编辑了迁移文件:
class AddPriceToLineItems < ActiveRecord::Migration
def change
add_column :line_items, :price, :decimal
LineItem.all.each do |li|
li.price = li.product.price
end
end
def down
remove_column :line_items, :price
end
end
一切都按计划进行,但是,我有一个关于 attr_accessible 的问题。据我了解,对象的所有属性都需要在 attr_accessible 中指定才能进行编辑。如果没有,您通常会收到此错误:
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: product
因此,所有属性都必须在关联模型中设置为 attr_accessible 的参数:
class LineItem < ActiveRecord::Base
**attr_accessible :cart_id, :product_id, :quantity**
belongs_to :cart
belongs_to :product
def total_price
product.price * quantity
end
end
如果这是真的,那么我的迁移如何能够更新新生成的列?如果该列刚刚生成,则该新属性尚未在关联模型的 attr_accessible 中指定。任何和所有输入将不胜感激。