0

私は Rails book (第 4 版) を使用して Agile Web Dev に取り組んでいますが、完全に行き詰っています... Mac OSX で Rails 3.2.3 を実行しています。タスクD-3: ボタンの追加.... それは test:functionals が章の最後で機能しないことから始まりました... それは私に次のようなエラーを与えました:

Can't Mass assign protected attributes: product

ここにあるアドバイスに従いました: http://forums.pragprog.com/forums/148/topics/10565

Line_Items_Controller のコード行を次のように変更しました

@line_item = @cart.line_items.build
@line_item.product = product 

現在の Line_Items_Controller create メソッドは次のようになります。

# POST /line_items

def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.line_items.build
@line_item.product = product

respond_to do |format|
  if @line_item.save
    format.html { redirect_to(@line_item.cart,
      :notice => 'Line item was successfully created.') }
    format.xml  { render :xml => @line_item,
      :status => :created, :location => @line_item }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @line_item.errors,
      :status => :unprocessable_entity }
  end
end
end

今、私はこの奇妙なメッセージを受け取っています:

NoMethodError in LineItemsController#create undefined method `product=' for   <LineItem:0x000001024f7fb0>

これが私の LineItem モデルです

   class LineItem < ActiveRecord::Base
  attr_accessible :cart_id, :product_id, :product
end

私は完全なRails(およびRuby)の初心者であるため、この時点で何をすべきかよくわかりません。誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

2

コードの元の行 @line_item = @cart.line_items.build(product: product)@line_item = @cart.line_items.build(:product_id => product.id)inに変更すると、line_items_controller.rbこの問題は解決しました。

于 2012-05-09T15:50:53.653 に答える
1

本の例を入力したとおりに動作させたい場合は、models/line_item.rb に移動し、attr_accessible を追加して次のようにします。

attr_accessible :cart_id, :product_id, :product

よろしく。

于 2012-08-21T17:04:01.313 に答える
1

私の場合、LineItem attr_accessible に :product_id があります。

attr_accessible :cart_id, :product_id

したがって、ビルドの属性の :product => product を :product_id => product.id に変更すると、機能します。

@line_item = @cart.line_items.build(:product_id => product.id)
于 2012-07-10T16:44:50.743 に答える
0

ActiveRecordライン アイテム モデルに製品の関連付けがありません。何を構築しているのかはわかりませんが、次のものが必要になると思います。

#lineitem
belongs_to :produce

#product
has_many :line_items

また、品目テーブルに product_id を追加する必要があります。

于 2012-05-09T03:21:01.307 に答える