在rails中,更新模型时,如何在使用以下调用时阻止更新模型的某些属性:
@user.update_profile params[:user]
由于任何人都可以使用“密码”这样的名称创建表单输入,您如何过滤允许更新的属性集?
这是attr_XXX的用途吗?
答案 0 :(得分:6)
您正在寻找attr_accessible
。它允许您指定可以通过批量更新设置哪些属性(如update_attributes
),但您仍然可以“手动”设置属性(即@user.attribute = ...
)。
有关详细信息,请参阅The importance of attr_accessible in Ruby on Rails。
答案 1 :(得分:4)
您正在寻找attr_protected为黑名单的任何您不希望在批量更新中更改的属性。 将它扔在你的模型中,并将一个属性符号列表提供给黑名单。
class User < ActiveRecord::Base
attr_protected :password
end
或者,您可以使用attr_accessible采用白名单方法,并且只有在一次更新整个记录时才能更新给定的属性。每个其他属性都将受到保护。
N.B 如果受保护的属性直接分配给
,则仍然可以覆盖它们@user.password = "not secure"