2016-04-05 8 views
3

Ich habe folgende Modelle eingerichtet.Nach dem Zerstören wird keine Assoziationszerstörung aufgerufen?

class Space 
    has_many :locations, through: :location_spaces 
    has_many :location_spaces, dependent: :destroy, inverse_of: :space 
end 

class Location 
    has_many :spaces, through: :location_spaces 
    has_many :location_spaces, dependent: :destroy, inverse_of: :location 
end 

class LocationSpace 
    belongs_to :location,  inverse_of: :location_spaces 
    belongs_to :space,  inverse_of: :location_spaces 
end 

Wenn ich einen SpaceLocation durch die location_ids Modifikation auf dem Raummodell zu erstellen, dies löst auch den AFTER_CREATE Rückruf für SpaceLocation.

Wenn Sie jedoch das Raummodell aktualisieren und die location_ids auf [] setzen, wird die SpaceLocation gelöscht. Ruft jedoch den after_destroy-Rückruf nicht auf. Mit Blick auf den Sql wird die Zerstörung gemacht.

Warum wird der after_destroy-Callback nicht aufgerufen? Ich habe jeden "nachher" -Rückruf versucht, einschließlich after_touched, und nichts wurde aufgerufen.

+0

Dies beantwortet meine Frage. http://stackoverflow.com/questions/30629680/rails-isnt-running-destroy-callbacks-for-has-many-through-join-model – ShivamD

Antwort

0

Vom docs for has_many:

Es gibt auch eine clear Methode, die die gleichen wie delete_all ist, mit der Ausnahme, dass es den Verein zurückkehrt, anstatt die Datensätze, die gelöscht wurden.

Vom docs for delete_all:

Löscht die Datensätze conditions passende, ohne zuerst die Datensätze instanziiert wird, und somit nicht die destroy Methode aufrufen noch Berufung auf Rückrufe.

Verwandte Themen