Retirer assosiation au lieu de détruire l'objet lorsque: allow_destroy => true
-
18-09-2019 - |
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)
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'
}
})