Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby on Rails Callback, what is difference between :before_save and :before_create?

Could you explain in detail what the :before_save and :before_create Ruby on Rails callbacks are, and what they have to do with Rails validations? Does validation occur after :before_save or :before_create?

like image 863
Agung Prasetyo Avatar asked Jun 06 '11 08:06

Agung Prasetyo


People also ask

Which of the given callbacks is executed after the After_update?

after_save , after_create , after_update are called within the transaction block, so they will be executed before executing the SQL statement. If you want to do something when the statement execution is completed, you should use after_commit callback.

What is the difference between delete and destroy in rails?

Basically destroy runs any callbacks on the model while delete doesn't. Deletes the record in the database and freezes this instance to reflect that no changes should be made (since they can't be persisted). Returns the frozen instance.

What is callback in Ruby on Rails?

Callbacks are methods that get called at certain moments of an object's life cycle. With callbacks it is possible to write code that will run whenever an Active Record object is created, saved, updated, deleted, validated, or loaded from the database.


2 Answers

before_save is called every time an object is saved. So for new and existing objects. (create and update action)

before_create only before creation. So only for new objects (create action)

like image 30
Michael Koper Avatar answered Sep 21 '22 11:09

Michael Koper


In a create operation under Rails, there are six callbacks before the database operation, and two after. In order, these are:

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    DATABASE INSERT
  7. after_create
  8. after_save

Update operations have exactly the same set, except read update instead of create everywhere (and UPDATE instead of INSERT).

From this, you can see that validation is carried out before the before_save and before_create callbacks.

The before_save occurs slightly before the before_create. To the best of my knowledge, nothing happens between them; but before_save will also fire on Update operations, while before_create will only fire on Creates.

like image 85
Chowlett Avatar answered Sep 20 '22 11:09

Chowlett