如何防止在Rails中更新单个属性?

时间:2012-08-18 16:35:37

标签: ruby-on-rails ruby-on-rails-3 models controllers before-save

提交表单时,如何防止在Rails中更新单个属性?应更新所有其他属性。

before_saveattr_reader还是其他方式?

如果使用before_save,如何访问属性哈希?

Rails 3.0.7

2 个答案:

答案 0 :(得分:2)

查看 attr_protected

Class YourModel << ActiveRecord::Base

  attr_protected :the_one_column, as: :update

  # ...
end

现在,作为调用update_attributes的一部分,您需要指定:update角色,例如

klass = YourModel.find(some_id)
klass.update_attributes(params[:your_model], as: :update)

如果在传递给:the_one_column的{​​{1}}中设置params,则会产生错误。

正如@Beerlington在对你的问题的评论中提到的,你还应该看看 attr_accessible 。通常使用update_attributes花费30分钟浏览应用程序白名单属性的所有模型,而不是使用attr_accessible将特定属性列入黑名单。

答案 1 :(得分:2)

其他选项只是在您的控制器中执行此操作:

klass.update_attributes( params[:your_model].except(:attributes_to_avoid) )