Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
  • Activerecord callbacks

    • 0
    • 2
    • 2
    • 0
    • 0
    • 0
    • 0
    • 0
    • 261
    Comment on it

    Callbacks are methods that get invoked at various stages of an Activerecord objects life cycle. and thus it is possible to write code that will run whenever an Activerecord object is created, saved, updated, deleted, validated, or loaded from the database.

    Below is the list of the callbacks that are available in rails framework:

    Creating an Object

    • before_validation ,after_validation, before_save ,around_save, before_create ,around_create, after_create, after_save

    Updating an Object

    • before_validation ,after_validation, before_save ,around_save, before_update ,around_update, after_update ,after_save

    Destroying an Object

    • before_destroy, around_destroy, after_destroy

    Some examples of callback use:

    • before validation:

      class User < ActiveRecord::Base validates :name, :first_name ,:last_name , :presence => true

      before_validation :ensure_user_has_a_name

      protected def ensure_user_has_a_name = first_name + + last_name unless first_name.nil && last_name.nil



    • before_save:

      class Location < ActiveRecord::Base

      validates :street_name, :city, :zip, :state, :country , :presence => true

      before_save :ensure_address


      def ensure_address self.address = [street_name , city , zip , state , country].compact.join(,)



    before_save is a callback that is invoked both while saving new record or updating existing record.

    There are some methods which do not trigger callbacks . They are :

    • decrement, decrement_counter, delete, delete_all, find_by_sql, increment, increment_counter, toggle, touch, update_column, update_all, update_counters

    Conditional Callbacks:

    We can make the execution of a callback method conditional on the satisfaction of a given condition. We can do this using the :if and :unless options, which can take a symbol, a string or a Proc. You may use the :if option when you want to specify under which conditions the callback should be called. If you want to specify the conditions under which the callback should not be called, then you may use the :unless option.For example:

    class Device < ActiveRecord::Base
      before_save :check_gateway
      def check_gateway
       self.gateway = '' if file_path.present? && gateway.blank?

    Using proc as condition for callback.

     class Order < ActiveRecord::Base
        before_save :normalize_card_number,:if => { |order| order.paid_with_card? }

 0 Comment(s)

Sign In

Sign up using

Forgot Password
Fill out the form below and instructions to reset your password will be emailed to you:
Reset Password
Fill out the form below and reset your password: