【问题标题】:How to prevent updating a single attribute in Rails?如何防止更新 Rails 中的单个属性?
【发布时间】:2012-08-18 16:35:36
【问题描述】:

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

before_saveattr_reader还是其他方式?

如果使用before_save,如何获取属性hash?

Rails 3.0.7

【问题讨论】:

  • 你查看过 attr_accessible 吗?

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


【解决方案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。使用attr_accessible 将应用程序的所有模型列入白名单属性通常比使用attr_protected 将特定属性列入黑名单要好。

【讨论】:

  • 新建一个会发生什么?
  • .create().new() + .save() 如果包含 :the_one_column 将抛出相同的错误。
  • 阅读有关 Rails 中的 mass assignment 的信息,特别是有关“角色”的信息。如果您希望在创建模型实例时允许 :the_one_column 通过批量分配而不是在更新时允许,您需要指定一个与默认值不同的单独“创建”。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2011-10-26
    相关资源
    最近更新 更多