Rails Callback

Callback

Do something before, after model operations

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • before_update
  • before_destroy
  • after_create
  • after_update
  • after_save
  • after_find
  • after_initialize

create/update/destroy

create, create!, decrement, destroy
destroy!, destroy_all, increment!, save
save!, toggle!, update, update_attribute, valid?

after_find

all, first, find, find_by, find_by_sql, last

after_initialize

new


Example

class Review < ActiveRecord::Base
  after_destroy :log_history
  
  private
  def log_history
     logger.info('deleted:' +  self.inspect)
  end
end
&#91;/ruby&#93;
basically, call back should be defined as private

<h3>Condition<h3>
[ruby]
after_destroy :log_histroy, unless: Proc.new { |r| r.name == "great" }

block callback

class Review < ActiveRecord::Base
  after_destroy do |r|
    logger.info('deleted: ' + r.inspect)
  end
end
&#91;/ruby&#93;

<h3>Create callback class</h3>
Example
[ruby]
class ReviewCallbacks
  cattr_accessor :logger
  self.logger ||= Rails.logger
  
  def after_destroy(r)
     logger.info('deleted: ' + r.inspect)
  end
end

class Review < ActiveRecord::Base after_destroy ReviewCallbacks.new end [/ruby]