Rails を使用したアジャイル Web 開発 (第 4 版) のチュートリアルに従っていますが、約 112 ページでエラーが発生し始めます。
Can't mass-assign protected attributes: 2
2 は song_id です。モデルで「#attr_accessible」を使用していません。これは、移行のためにこのコードを導入したときに発生し始めます
class AddQuantityToLineItems < ActiveRecord::Migration
def self.up
add_column :line_items, :quantity, :integer, :default => 1
end
def self.down
remove_column :line_items, :quantity
end
end
と
class CombineItemsInCart < ActiveRecord::Migration
def self.up
Cart.all.each do |cart|
sums = cart.line_items.group(:song_id).sum(:quantity)
sums.each do |song_id, quantity|
if quantity > 1
cart.line_items.where(:song_id=>song_id).delete_all
cart.line_items.create(:song_id=>song_id, :quantity=>quantity)
end
end
end
end
def self.down
LineItem.where("quantity>1").each do |line_item|
line_item.quantity.times do
LineItem.create :cart_id=>line_item.cart_id,
:song_id=>line_item.song_id, :quantity=>1
end
line_item.destroy
end
end
end
編集
co を再確認した後、エラーがコントローラーにあることに気付きました。このように見える
def create @cart = current_cart song = Song.find(params[:song_id]) @line_item = @cart.line_items.build @line_item.song = song @line_item = @cart.add_song(song.id)
respond_to do |format|
if @line_item.save
format.html { redirect_to @line_item.cart, notice: 'Line item was successfully created.' }
else
format.html { render action: "new" }
end
end
これは問題を引き起こす行です
@line_item = @cart.add_song(song.id)