ActiveRecord Callbacks - RORLab Season 3-5


Published on

Published in: Technology
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

ActiveRecord Callbacks - RORLab Season 3-5

  1. 1. Active RecordCallbacksRor lab. season 3- the 5th round -April 27th, 2013ChangHoon Jeong(@seapy)13년 4월 27일 토요일
  2. 2. Contents• The Object Life Cycle• Validations Overview• Validation Helpers• CommonValidationOptions• ConditionalValidation• CustomValidations• Working withValidationErrors• DisplayingValidation Errorsin theView• Callbacks Overview• Available Callbacks• Running Callbacks• Skipping Callbacks• Halting Execution• Relational Callbacks• Conditional Callbacks• Callback Classes• Observers• Transaction CallbacksValidations Callbacks13년 4월 27일 토요일
  3. 3. Life-cycle ofObjectsDB13년 4월 27일 토요일
  4. 4. Life-cycle ofObjectsActiveRecordModelDB13년 4월 27일 토요일
  5. 5. Life-cycle ofObjectsObjectCreate SaveUpdateDeleteActiveRecordModelDB13년 4월 27일 토요일
  6. 6. Life-cycle ofObjectsObjectCreate SaveUpdateDeleteValidationloadActiveRecordModelDB13년 4월 27일 토요일
  7. 7. Callbacks• Methods : protected or private• Before or after certain moments of anobject’s life cycle• 6 events: create, save, update, delete, validate, load• Register using a macro-style class method★ as an ordinary method or★ supply as a block13년 4월 27일 토요일
  8. 8. As OrdinaryMethodsclass User < ActiveRecord::Base  validates :login, :email, :presence => true   before_validation :ensure_login_has_a_value   protected  def ensure_login_has_a_value    if login.nil?      self.login = email unless email.blank?    end  endendMacro-style class methods :13년 4월 27일 토요일
  9. 9. A Blockclass User < ActiveRecord::Base  validates :login, :email, :presence => true   before_create do |user| = user.login.capitalizeif  endendMacro-style class methods :13년 4월 27일 토요일
  10. 10. Available Callbacks★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_destroySaveDestroyCreateUpdateValidationDB13년 4월 27일 토요일
  11. 11. After_find> After_initializeclass User < ActiveRecord::Base  after_initialize do |user|    puts "You have initialized an object!"  end   after_find do |user|    puts "You have found an object!"  endend >> User.newYou have initialized an object!=> #<User id: nil> >> User.firstYou have found an object!You have initialized an object!=> #<User id: 1>13년 4월 27일 토요일
  12. 12. MethodsTriggering Callbacks• create• create!• decrement!• destroy• destroy_all• increment!• save• save!• save(:validate =>false)• toggle!• update• update_attribute• update_attributes• update_attributes!• valid?‘after_find’ callback• all• first• find• find_all_by_attribute• find_by_attribute• find_by_attribute!• last13년 4월 27일 토요일
  13. 13. MethodsSkipping Callbacks• decrement• decrement_counter• delete• delete_all• find_by_sql• increment• increment_counter• toggle• touch• update_column• update_all• update_counters13년 4월 27일 토요일
  14. 14. Methods Calling Callbacks Methods Skipping Callbackscreatecreate!decrement! decrement / ~_counterdestroy deletedestroy_all delete_allincrement! increment / ~_countersavesave!save(false)toggle! toggleupdateupdate_attribute update_columnupdate_attributes update_allupdate_attributes! update_countersvalid?find_by_sqltouch13년 4월 27일 토요일
  15. 15. Halting Execution•Queue★ validations for model★ registered callbacks★ database operations• Wrapped in a Transaction★ before_ callbacks: false or exception > stopped > ROLLBACK★ after_ callbacks: exception > stopped > ROLLBACK13년 4월 27일 토요일
  16. 16. RelationalCallbacks13년 4월 27일 토요일
  17. 17. ConditionalCallbacks• As with validations★ Using :if and :unless with a Symbol★ Using :if and :unless with a String★ Using :if and :unless with a Proc13년 4월 27일 토요일
  18. 18. ConditionalCallbacksas a symbolas a stringas a Proc* multiple conditions possible!13년 4월 27일 토요일
  19. 19. 감사합니다.
  20. 20.  13년 4월 27일 토요일
  21. 21. public/protected/privateclasspublicprotectedprivateclasspublicprotectedprivateparentchildprivate_method년 4월 27일 토요일