跟随the ruby on rails guide开发人员不能批量分配受保护的字段,但在尝试这样做时不会出现异常,对吧?
但在我的案例中,通过new
方法在rails
应用中分配不同的参数:
@edition = Edition.new params[:edition]
引发以下异常:
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: price
为什么?我理解错什么了吗?这是一种不获得批量分配例外的方法吗?我认为在赋值之前从散列中删除受保护的属性是不方便的。
更新:版本型号:
class Edition < ActiveRecord::Base
attr_accessible :title, :description
attr_protected :price
end
params[:edition].inspect
{"title"=>"t", "description"=>"d", "price"=>"123"}
最佳答案
您试图在批量分配中分配受保护的属性价格,方法是
@edition = Edition.new params[:edition]
这是变量的大规模分配,在params[:edition]中,根据您的编辑,存在根据您的代码无法大规模分配的变量价格。
要解决这个问题,您要么必须删除我认为您不想做的对price的保护,要么只使用new批量分配未受保护的变量,然后分配受保护的变量。所以:
@edition = Edition.new params[:edition].except("price")
@edition.price = params[:edition]['price']
或
@edition = Edition.new params[:edition], :without_protection => true
编辑:news.ycombinator.com/item?id=3780963rails 3.23现在在默认情况下使验证变得严格,这会引发异常。文件过期了。