提交表单时,如何防止在Rails中更新单个属性?应更新所有其他属性。
是before_save
,attr_reader
还是其他方式?
如果使用before_save
,如何访问属性哈希?
Rails 3.0.7
答案 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) )