2

遵循ruby​​ on rails 指南,开发人员无法批量分配受保护的字段,但尝试执行此操作时不会出现异常,对吗?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"}
4

1 回答 1

3

您正在尝试通过放置在批量分配中分配受保护的属性价格

@edition = Edition.new params[:edition]

这是变量的批量分配,根据您的编辑,在 params[:edition] 中,根据您的代码无法批量分配可变价格。

要解决此问题,您要么必须删除我认为您不想做的价格保护,要么只用 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=3780963 Rails 3.23 现在默认使验证严格,这会引发该异常。文档已过期。

于 2012-06-13T17:35:56.993 回答