0

我的班级有一个secret我使用特定过程生成的列。因此,我不想让用户通过编辑表单更新此字段。
但是,如果用户手动将secret标签添加到表单并提交,我的对象secret也会更新。

def update
  object.attributes = params[:my_class]
end

我想我创建了一个像这样的前置过滤器

before_filter :clear_secret, :only => :update
def clear_secret
  params.delete(:secret)
end

我想知道是否有更好的方法来做到这一点。我可以从模型中做到这一点吗?是否有一个已经存在的 Rails 方法呢?

4

2 回答 2

2

通常使用strong_parameters gem 来执行此操作。

使用所述 gem,您只能允许可以更新的属性,如下所示:

params.permit(:some_attr, :another_attr)
于 2013-07-09T04:19:02.727 回答
2

如果您使用的是 Rails 3,您可以通过以下方式保护它attr_protected

class YourModel < ActiveRecord::Base
  attr_protected :secret
end

试图将secret字段注入表单的用户将导致 Rails 引发ActiveModel::MassAssignmentSecurity::Error.

然而,这种机制在 Rails 4 中被弃用,取而代之的是 @gylaz 引用的 strong_parameters 机制。

于 2013-07-09T04:28:27.813 回答