確認環境
$ bundle exec ruby --version
ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-darwin19]
$ bundle exec rails --version
Rails 6.0.4.6
Rails のコードの場所を調べる
※ Hoge
というモデルが既に存在しているとします。
delete
$ rails c
...
irb(main):004:0> Hoge.last.method(:delete).source_location
=> ["/Users/xxxxx/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activerecord-6.0.4.6/lib/active_record/persistence.rb", 518]
destroy
$ rails c
...
irb(main):009:0> Hoge.last.method(:destroy).source_location
=> ["/Users/xxxxx/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activerecord-6.0.4.6/lib/active_record/transactions.rb", 309]
destroy!
$ rails c
...
irb(main):010:0> Hoge.last.method(:destroy!).source_location
=> ["/Users/xxxxx/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/activerecord-6.0.4.6/lib/active_record/persistence.rb", 550]
ソースのコメント箇所を見てみる
delete メソッドをみると callback が動作させる場合、destroy を使う必要があることが分かります。
また dependent オプションを使いたい場合も、destroy を使う必要があります。
# To enforce the object's +before_destroy+ and +after_destroy+
# callbacks or any <tt>:dependent</tt> association
# options, use <tt>#destroy</tt>.