How to prevent updating a single attribute in Rail

2019-08-06 19:22发布

When a form is submitted, how to prevent a single attribute from being updated in Rails? All other attributes should be updated.

Is it before_save, attr_reader or some other way?

If using before_save, how to access to the attributes hash?

Rails 3.0.7

2条回答
虎瘦雄心在
2楼-- · 2019-08-06 19:41

Other option is simply doing this in your controller:

klass.update_attributes( params[:your_model].except(:attributes_to_avoid) )
查看更多
可以哭但决不认输i
3楼-- · 2019-08-06 19:55

Check out attr_protected.

Class YourModel << ActiveRecord::Base

  attr_protected :the_one_column, as: :update

  # ...
end

Now as part of a call to update_attributes, you'd specify the :update role, for example

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

If :the_one_column is set in params passed to update_attributes, it will throw an error.

As @Beerlington mentioned in his comment to your Question, you should also check out attr_accessible. It's generally better to spend the 30 minutes going through all models of your application white-listing attributes using attr_accessible than it is to blacklist specific attributes with attr_protected.

查看更多
登录 后发表回答