Rails:MassAssignmentSecurity ::错误

时间:2012-06-13 11:37:08

标签: ruby ruby-on-rails-3 exception mass-assignment

以下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"}

1 个答案:

答案 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现在默认使验证严格,这会引发该异常。文档已过期。