我的班级有一个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方法?
答案 0 :(得分:2)
使用strong_parameters gem来执行此操作是常规的。
使用所述gem,您只能允许可以更新的属性,如下所示:
params.permit(:some_attr, :another_attr)
答案 1 :(得分:2)
如果您使用的是Rails 3,则可以通过attr_protected
class YourModel < ActiveRecord::Base
attr_protected :secret
end
尝试在表单中插入secret
字段的用户将导致Rails引发ActiveModel::MassAssignmentSecurity::Error
。
但是,在Rails 4中不推荐使用这种机制,而是赞成@gylaz引用的strong_parameters机制。