Bei Verwendung des neuen accepts_nested_attributes_for
in ActiveRecord ist es möglich, die Option :allow_destroy => true
. Wenn diese Option gesetzt ist, wird jeder Hash, der verschachtelte Attribute wie {"_delete"=>"1", "id"=>"..."}
übergeben an update_attributes
wird das verschachtelte Objekt gelöscht.
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 - anstatt die verschachtelten Objekte zu löschen, wenn "_delete" => "1"
- einfach die Assoziation entfernen? (d.h. im obigen Fall setzen Sie die forum_id des Benutzers auf null)
Bonusfrage: Was ist, wenn ich beim Entfernen der Assoziation auch das Attribut an auf dem verschachtelten Objekt ändern möchte? (z. B. das Setzen eines Status oder eines Zeitstempels)