Entfernen Assosiation stattdessen Objekt zu zerstören, wenn: allow_destroy => true
-
18-09-2019 - |
Frage
Wenn Sie den neuen accepts_nested_attributes_for
in Activerecord verwendet, ist es möglich, die Option :allow_destroy => true
zu verwenden. Wenn diese Option aktiviert ist, wird jede Hash-Attribute wie {"_delete"=>"1", "id"=>"..."}
verschachtelt enthält, übergeben update_attributes
das verschachtelte Objekt löschen.
Einfache Einrichtung:
class Forum < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users, :allow_destroy => true
end
class User < ActiveRecord::Base
belongs_to :forum
end
Forum.first.update_attributes("users_attributes"=>{"0"=>{"_delete"=>"1", "id"=>"42"}})
Frage: Wie kann ich - statt die verschachtelten Objekten zu löschen, wenn "_delete" => "1"
- nur die Assoziation entfernen? (Das heißt, in dem oben genannten Fall eingestellt den forum_id auf dem Benutzer zu nil)
Bonus Frage: Was passiert, wenn ich auch das ein Attribut für das verschachtelte Objekt geändert werden soll, wenn die Zuordnung zu entfernen? (Zum Beispiel wie einen Zustand oder einen Zeitstempel gesetzt wird)
Lösung
Statt für den Benutzer zu fragen, gelöscht werden "_delete" => '1'
verwenden, können Sie nicht nur aktualisiert das nested_attributes mit:
Forum.first.update_attributes("users_attributes"=> {
"0" => {
"id" => "42",
"forum_id" => "",
"state" => 'removed'
}
})