Techioz Blog

アクティブな管理者で after_destroy が機能しない理由を誰か教えてください。

概要

Rails 5 と active_admin 2.0.0 を使用しています

以下のようなアクティブ管理でコールバックを使用しています

  after_destroy do |my_model|
    account_id = my_model.try(:account_id)
    Account.desable_something(account_id)
  end

ただし、このコールバックはデータを削除した後は機能しません。

以前にモデルファイルでこれを試しましたが、一部の環境では機能しましたが、すべての環境では機能しませんでした。次に、このアプローチを管理ファイルで使用した後、そこでも機能しません。

解決策

Rails では、データベースからレコードを削除するには、destroy と delete の 2 つの方法があります。それらの違いは、destroy はコールバック (after_destroy など) をトリガーするのに対し、delete はコールバックをトリガーしないことです。

あなたの場合、destroy メソッドを使用してデータを削除している場合、after_destroy コールバックがトリガーされる必要があります。ただし、delete メソッドを使用している場合、コールバックはトリガーされません。