I need to know when to use :dependent => :destroy_all
and when to use :dependent => :destroy
What happen if my model has_many child models, and I used :dependent => :destroy
? will it destroy only the first child model ?
is this line of code wrong:
has_many books, :dependent => :destroy
shall it be like this:
has_many books, :dependent => :destroy_all
?
This will destroy all books. All of them.
has_many books, :dependent => :destroy
An important thing to remember is that :dependent => :destroy
will cause the calling of the #destroy
method in each and every one of the associated Books. By calling #destroy
on each Book, any before_destroy
or after_destroy
callback will be executed for each Book.
Naturally, if you have a LOT of dependent books, this process could be expensive.
The :destroy_all
is invalid, maybe you were thinking about :delete_all
. The difference with :delete_all
(instead of just :destroy
) is that Rails will issue a single SQL statement to delete all dependent book records. No #destroy
method will be called on any Book record, and no before_destroy
or after_destroy
callback will be executed.
The upside is that a single SQL statement is many times more efficient to delete records from the database than calling #destroy
on each one of them.
This is very important to know. If you have any *_destroy
callbacks on the Book model, you should be aware that defining :dependent => :delete_all
will have the effect of ignoring any callbacks you defined on the Book model.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With