909588d causes breakage if foreign keys are used

909588d (for https://rails.lighthouseapp.com/projects/8994/tickets/6191) reordered how destroy works with has and belongs to many.

The intent of the change is to ensure that before_destroy is called before any destroying happens which sounds right, but does it by removing the join table records after the owner is destroyed. This breaks all of my foreign key backed habtm associations since the foreign key won't allow deleting the owner while there are still join records pointing at it.

Was this an oversight? Having all the before_destroy callbacks run first definitely feels right, but I'd much prefer that this didn't clash with foreign keys (even if the default rails position isn't to use database constraints)

Fred

Yes, it is a bug.

Here is a very simply fix that considers both your scenario and the
one in the original patch: https://gist.github.com/883459

Once we have a test case, I can apply and get this fixed. :smiley: Thanks
for reporting!

Note: it seems google ignored my original post. Sorry if it ends up
twice.

Yes, it is a bug.

Here is a very simple fix that considers your scenario and the one in
the original patch: https://gist.github.com/883459

If you can provide a failing test, we can commit the fix + tests
straight away. :smiley: Thanks for reporting!

Note: it seems google ignored my original post. Sorry if it ends up
twice.

Yes, it is a bug.

Here is a very simple fix that considers your scenario and the one in
the original patch:https://gist.github.com/883459

Looks good!

If you can provide a failing test, we can commit the fix + tests
straight away. :smiley: Thanks for reporting!

I'll see what I can cook up. I assume it would be preferable to come
up with a test that enshrines the precise sequencing without actually
requiring the table to have foreign keys in place

Fred

Since you guys are already working on it can I also get some feedback on this comment https://rails.lighthouseapp.com/projects/8994/tickets/5674-regression-habtm-deletion-fails-when-join-table-has-foreign-keys#ticket-5674-10 ?

(To repeat: patch solves the problem with the DB keys but any before_destroy callback on the model with HABTM assoc will see that assoc already emptied when fired)

>> Note: it seems google ignored my original post. Sorry if it ends up
>> twice.

>> Yes, it is a bug.

>> Here is a very simple fix that considers your scenario and the one in
>> the original patch:https://gist.github.com/883459

> Looks good!

Since you guys are already working on it can I also get some feedback on
this commenthttps://rails.lighthouseapp.com/projects/8994/tickets/5674-regression…
?

We should be ok there - The ticket/commit i linked to earlier adds
tests ensuring that before_destroy fires before any destroying happens
(although unfortunately in a way that introduces problems when foreign
keys are in use). José's proposed fix won't break that

Fred

I'll see what I can cook up. I assume it would be preferable to come
up with a test that enshrines the precise sequencing without actually
requiring the table to have foreign keys in place

I've put something up at
https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/6629-habtm-destroy-deletes-record-before-associated-records

Fred