Temporary disabling after_update

Hi,

I am trying to replace my old database trigger with ActiveRecord
callbacks in rails.
I have a model like following:

class Action < ActiveRecord::Base
belongs_to :inquiry

def after_update
#clean up all action associated with the inquiry.
Action.update_all(“latest = ‘’”, [“inquiry_id = ?”,
self.inquiry_id])
#find the latest action
latest_action = Action.find(:first, :conditions => [“deleted <> 1
and inquiry_id = ?”, self.inquiry_id], :order => “action_date DESC, id
DESC”)
#mark ‘Y’ to the latest action.
latest_action.update_attribute(“latest”, “Y”) if latest_action
end

end

Model “Inquiry” has many “actions”, so I want to maintain the field
called “latest” to indicate the latest action.

However, this will not work. My after_update call another update, and
after_update is recursively called. This will end up with getting
stack overflow.

Are there any way to temporary disable after_update callbacks?

Thanks,
Glen

Interestingly enough, update_all does not call after_update, so I
just settled with following code for now.
Please let me know if you have smarter solutions.

def after_update
Action.update_all(“latest = ‘’”, [“inquiry_id = ?”,
self.inquiry_id])
latest_action = Action.find(:first, :conditions => [“deleted <> 1
and inquiry_id = ?”, self.inquiry_id], :order => “action_date DESC, id
DESC”)
Action.update_all(“latest = ‘Y’”, [“id = ?”, latest_action.id]) if
latest_action
end

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs