2

Lors de l'utilisation du nouveau accepts_nested_attributes_for dans ActiveRecord, il est possible d'utiliser l'option :allow_destroy => true. Lorsque cette option est définie, tout hachage contenant des attributs imbriqués comme {"_delete"=>"1", "id"=>"..."} transmis à update_attributes va supprimer l'objet imbriqué.Suppression de l'assosiation au lieu de la destruction de l'objet lorsque: allow_destroy => true

Installation 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? (Dans le cas ci-dessus, définissez le forum_id sur l'utilisateur à zéro)

Question supplémentaire: Que faire si je souhaite également modifier l'attribut d'un objet imbriqué lors de la suppression de l'association? (Par exemple comme la création d'un état ou d'un horodatage)

Répondre

2

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

Forum.first.update_attributes("users_attributes"=> { 
    "0" => { 
    "id" => "42", 
    "forum_id" => "", 
    "state" => 'removed' 
    } 
}) 
Questions connexes