我正在关注使用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
我错过了什么?
答案 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
第一种是旧的默认方式,更容易。第二种方法对于生产应用程序更安全。