以下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"}
答案 0 :(得分:3)
您尝试通过放置
来分配质量分配中的受保护属性价格@edition = Edition.new params[:edition]
根据你的编辑,这是变量的质量分配和params [:edition],根据你的代码,有一个变量价格不能被大量分配。
要解决此问题,您必须删除我认为您不想要的价格保护,或者仅使用new分配未受保护的变量,然后分配受保护的变量。 SO:
@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 = 3780963 Rails 3.23现在默认使验证严格,这会引发该异常。文档已过期。