我正在通過使用rails第4版(rails 3.2+)的敏捷web開發工作,並且有一個關於migraitons的問題。有一個練習,我必須將列添加到現有表中,然後使用值更新該新列。我需要在'line_items'表中添加'價格'列。首先,我產生的遷移:attr_accessible在遷移
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中指定。任何和所有的輸入將不勝感激。