2010-07-28 8 views
4

J'ai une relation HABTM (affectations <> assignments_candidates des candidats)Rails - suppression d'un enregistrement unique dans une table d'intersection HABTM

Je veux être en mesure de supprimer un candidat de cession. voici mon code jusqu'à présent

@assignment = Assignment.find(:first, 
    :joins => :candidates, 
    :select => "assignments_candidates.*", 
    :conditions => ["assignments_candidates.candidate_id = ? AND assignments_candidates.assignment_id = ?", 
    params[:candidate_id], params[:assignment_id]] 
) 
    @assignment.destroy 

Au moment tout ce que je pense que cela ne fait détruire l'objet pas l'enregistrement dans la table d'intersection

des idées?

Merci, Alex

Répondre

13

Voici comment je l'ai fait pour référence future.

assignment = Assignment.find(params[:assignment_id]) 
    candidate = assignment.candidates.find(params[:candidate_ids]) 
    assignment.candidates.delete(candidate) 
+0

Merci beaucoup mec. –

+0

Je souhaite que j'ai vu cela avant que j'ai soufflé mon rôle entier de comme partout! fwiw googlers, 'assignment.candidates.first.destroy' ne fonctionnera pas, vous supprimerez tous les enregistrements candidats. Je ne sais pas encore pourquoi, mais ça craint. – pjammer

-1

Avez-vous ajouté un qualificatif :dependent => :destroy aux has_many (ou has_and_belongs_to_many) les relations modèles associés?

+0

Non, je n'en ai pas. plusieurs candidats sont attachés à une affectation, mais je veux seulement pouvoir en supprimer un à la fois. – Alex

+0

@Alex Vous pouvez utiliser un rappel 'after_destroy' pour nettoyer l'enregistrement de la table de jointure. Cela fonctionne transactionnellement avec votre détruire donc il devrait être sûr. Voir http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html#M001385 – bjg

Questions connexes