Dziwne zachowanie #delete_all na relacjach

Ok. Natknąłem się dzisiaj na bardzo dziwne zachowanie Rails.

[code]class A < ActiveRecord::Base
has_many :bs
end

class B < ActiveRecord::Base
belongs_to :a
end[/code]

[code]a = A.create(:name => ‘a’)
b = B.create(:name => “b1”, :a => a)

a.bs.delete_all

SQL (0.3ms) UPDATE “bs” SET “a_id” = NULL WHERE “bs”.“a_id” = 3 AND “bs”.“id” IN (5)[/code]
Nulluje zamist kasować. Spotkał się z tym ktoś, dałbym sobie rękę uciąć że przed 3.2 tak to się nie zachowywało tylko cięło równo z ziemią.

Nullowanie to defaultowa strategia.

maykel: mógłbyś podać dokładnego linka?

Anyway dziwne bo jednocześnie a.destroy
dla tego samego scenariusza zupełnie nie rusza rekordów B (spodziewałbym się że zrobi nullify w takim wypadku).
No nic.

Aż zajrzałem do źródła. I wygląda na to że zachowanie delete_all się zmieniło gdzieś w międzyczasie z “wykasuj wszystkie rekordy” na “wykasuj rekordy z tego powiązania” co oznacza “usuń klucz obcy z powiązanych rekordów”

Dla potomności - wygląda na to że teraz zamiast delete_all można próbować użyć a.delete_all_on_destroy (kilka linijek niżej w tym samym pliku, ale komentarz twierdzi że jest to raczej metoda prywatna) albo a.scoped.delete_all