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)

War es hilfreich?

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'
  }
})
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top