1

我正在关注第 4 版 Agile Web Dev with Rails。在第 9 章第 112 页。我正在尝试运行 rake test:functional。我想我遵循了他们的每一段代码,但这给了我一个质量分配错误。当我运行服务器时,它给了我这个错误

ActiveModel::MassAssignmentSecurity::LineItemsController#create 中的错误

无法批量分配受保护的属性:产品

这就是 LineItemsController 创建函数的样子

  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

要解决此问题,您可以执行以下两项操作之一:

1)更改此设置(在您的 config/application.rb 文件中)false以允许在站点范围内进行大规模分配

config.active_record.whitelist_attributes = false

2)通过在模型中的某处添加此行,将您将要更改的所有属性列入白名单:

attr_accessible :product

第一种是旧的默认方式,而且更容易。第二个对于生产应用程序更安全。

于 2012-05-23T02:48:58.083 回答