1

Railsを使用したアジャイルWeb開発の第4版をフォローしています。第9章112ページ。私はraketest:functionalを実行しようとしています。私は彼らのコードのすべての部分に従ったと思いますが、それは私に大量割り当てエラーを与えています。サーバーを実行すると、このエラーが発生します

ActiveModel :: MassAssignmentSecurity :: LineItemsController#createのエラー

保護された属性を一括割り当てできません:製品

LineItemsControllercreate関数は次のようになります。

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

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

これは、test /Functional/フォルダーのline_items_controller_test.rbにある作成テストです。

  test "should create line_item" do
    assert_difference('LineItem.count') do
      post :create, product_id: products(:ruby).id
    end

    assert_redirected_to cart_path(assigns(:line_item).cart)
  end

私は何を取りこぼしたか?

4

1 に答える 1

4

これは、Github の大失敗による Rails の新しいバージョンの最近の変更です: https://github.com/rails/rails/commit/b83965785db1eec019edf1fc272b1aa393e6dc57

これを修正するには、次の 2 つのいずれかを行います。

1) この設定 (config/application.rb ファイル内) を変更しfalseて、サイト全体で一括割り当てを許可します。

config.active_record.whitelist_attributes = false

2) モデルのどこかに次の行を追加して、変更するすべての属性をホワイトリストに登録します。

attr_accessible :product

1 つ目は古いデフォルトの方法で、より簡単です。2 番目の方法は、運用アプリにとってより安全です。

于 2012-05-23T02:48:58.083 に答える