Question

Lorsque vous utilisez la nouvelle accepts_nested_attributes_for ActiveRecord, il est possible d'utiliser l'option :allow_destroy => true. Lorsque cette option est activée, tout hachage contenant des attributs imbriqués comme {"_delete"=>"1", "id"=>"..."} passé à update_attributes supprime l'objet imbriqué.

Configuration simple:

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"}})

Question: Comment puis-je - au lieu de supprimer les objets imbriqués lorsque "_delete" => "1" - simplement supprimer l'association? (À savoir dans le cas ci-dessus fixé sur le forum_id l'utilisateur à zéro)

Question bonus: Que faire si je veux aussi changer un attribut sur l'objet imbriqué lors du retrait de l'association? (Par exemple, comme la fixation d'un état ou d'une estampille temporelle)

Était-ce utile?

La solution

Au lieu de demander à l'utilisateur de supprimer à l'aide "_delete" => '1', pouvez-vous pas seulement le mettre à jour en utilisant les nested_attributes:

Forum.first.update_attributes("users_attributes"=> { 
  "0" => {
    "id" => "42",
    "forum_id" => "",
    "state" => 'removed'
  }
})
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top