跟随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现在在默认情况下使验证变得严格,这会引发异常。文件过期了。

07-24 13:24