| create | update | destroy |
|---|---|---|
| before_validation before_validation_on_create after_validation after_validation_on_create before_save before_create | before_validation before_validation_on_update after_validation after_validation_on_update before_save before_update | before_destroy |
| create operation | update operation | destroy operation |
| after_create after_save | after_update after_save | after_destroy |
# 1. Defining a method
def before_save
# encrypt password here
end
# 2. Referring to a method with a symbol
before_save :encrypt_password
# 3. With a Proc object
before_save Proc.new { |object| ... }
class User < ActiveRecord::Base
before_save :encrypt_password
private
def encrypt_password
return if password.blank?
if new_record?
self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{login}--")
end
self.crypted_password = encrypt(password)
end
end
class Comment < ActiveRecord::Base
belongs_to :user
def after_save
user.update_search_index
end
def after_destroy
user.update_search_index
end
end
class AuditObserver < ActiveRecord::Observer
observe Order, Payment, Refund
def after_save(model)
model.logger.info("Audit: #{model.class.name} #{model.id} created")
end
end
# List your observers in config/environment.rb
config.active_record.observers = :order_observer, :audit_observer
def after_find # After any find invocation end def after_initialize # After any object is created end