A quick tip for utilizing a before_destroy callback in Rails alongside associations.
It's not often we make use of "before_destroy" callbacks in Rails (in fact, we advocate for service objects); however, we found ourselves wanting to make use of this callback recently to process data in a has many relationship.
Archive Association on Destroy
In the following example, we want to perform some logic on any associated models using an
ActiveJob worker, as well as ensure that each payment method is updated to remove the reference to this parent model.
With this code however, when our callback is executed,
payment_methods will be empty, as the
dependent: :nullify has already set the foreign key value to
null for each.
Prepend the Callback
As it turns out, the
dependent option on a
has_many association is implemented as a callback itself, a
before_destroy to be exact. So while we could write a custom
before_action that also handles the nullification of the foreign key, we couldn't easily reuse this existing service.
In this scenario, we simply
prepend our callback so it is executed before foreign key nullification occurs.