如何防止更新Rails中的单个属性?(How to prevent updating a singl

2019-10-17 04:19发布

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

难道before_saveattr_reader或一些其他的方式?

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

Rails的3.0.7

Answer 1:

退房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在设置params传递给update_attributes ,它会抛出一个错误。

作为@Beerlington在他对你的问题发表评论时提及,你也应该看看attr_accessible 。 它通常是更好地度过30分钟通过应用程序白名单的所有车型会使用属性attr_accessible比它列入黑名单具有特定属性的attr_protected



Answer 2:

另一种选择是简单地做这在你的控制器:

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


文章来源: How to prevent updating a single attribute in Rails?