rails/rails — pull request #14546 by eileencodes (2014-04-01 01:42:19+00:00)
Title: Fix delete all to not use in statement

When delete_all is run on a CollectionProxy and has a dependency of delete_all the SQL that is produced has an IN statement.

```DELETE FROM `associated_model` where `associated_model`.`parent_id` = 1 AND `associated_model`.`id` IN (1, 2, 3...)```

This is only happening if the association is not loaded — both loaded and non-loaded delete_all should behave the same. This is a problem when it comes to deleting many records because the query becomes very slow. Instead the SQL produced should be:

```DELETE FROM `associated_model` where `associated_model`.`parent_model_id`=1```

I fixed this by making sure the check for loaded and destroy also makes sure that the dependent is not delete_all, so the conditional goes to the else and deletes the records directly without the IN statement.

Thanks to @tenderlove for pairing with me to figure out exactly what was causing this issue.