rake test:函数不工作 - 错误MassAssignmentSecurity:错误

时间:2012-05-23 01:47:38

标签: ruby-on-rails unit-testing

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

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

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

这就是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

我错过了什么?

1 个答案:

答案 0 :(得分: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

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