How to "update_attributes" without executing "before_save"? How to "update_attributes" without executing "before_save"? ruby-on-rails ruby-on-rails

How to "update_attributes" without executing "before_save"?


In rails 3.1 you will use update_column.

Otherwise:

In general way, the most elegant way to bypass callbacks is the following:

class Message < ActiveRecord::Base  cattr_accessor :skip_callbacks  before_save lambda { foo(publisher); bar }, :unless => :skip_callbacks # let's say you do not want this callback to be triggered when you perform batch operationsend

Then, you can do:

Message.skip_callbacks = true # for multiple recordsmy_message.update_attributes(:created_at => ...)Message.skip_callbacks = false # reset

Or, just for one record:

my_message.update_attributes(:created_at => ..., :skip_callbacks => true)

If you need it specifically for a Time attribute, then touch will do the trick as mentioned by @lucapette .


update_all won't trigger callbacks

my_message.update_all(:created_at => ...)# ORMessage.update_all({:created_at => ...}, {:id => my_message.id})

http://apidock.com/rails/ActiveRecord/Base/update_all/class