5

Depuis le guide des associations Rails, ils démontrent plusieurs-à-plusieurs en utilisant has_many: à travers comme ceci:Ajout et suppression d'un has_many: par rapport

class Physician < ActiveRecord::Base 
    has_many :appointments 
    has_many :patients, :through => :appointments 
end 

class Appointment < ActiveRecord::Base 
    belongs_to :physician 
    belongs_to :patient 
end 

class Patient < ActiveRecord::Base 
    has_many :appointments 
    has_many :physicians, :through => :appointments 
end 

Comment pourrais-je créer et supprimer des rendez-vous?

Si j'ai un @physician, est-ce que j'écris quelque chose comme ceci pour créer un rendez-vous?

@patient = @physician.patients.new params[:patient] 
@physician.patients << @patient 
@patient.save # Is this line needed? 

Qu'en est-il du code pour la suppression ou la destruction? De plus, si un patient n'existait plus dans le tableau des rendez-vous, sera-t-il détruit?

Répondre

7

Dans votre code de création d'un rendez-vous, la deuxième ligne n'est pas nécessaire, et en utilisant la méthode #build au lieu de #new:

@patient = @physician.patients.build params[:patient] 
@patient.save # yes, it worked 

Pour détruire un enregistrement de rendez-vous pourriez simplement trouver et détruire:

@appo = @physician.appointments.find(1) 
@appo.destroy 

Si vous voulez détruire les dossiers de nomination ainsi que la destruction d'un patient, vous devez ajouter le: réglage de la dépendance à l'has_many:

class Patient < ActiveRecord::Base 
    has_many :appointments 
    has_many :physicians, :through => :appointments, :dependency => :destroy 
end 
+1

Merci, je suppose que la suppression du rendez-vous permettra également de retirer le médecin du patient et vice versa? – dteoh

+1

Non, ce n'est pas le cas sauf si vous ajoutez ': dependency =>: destroy' à' belongs_to'. – Kevin

+0

En fait, le paramètre ': dependency' ajoute simplement un hook before_destroy au modèle. Sans cela, aucun autre modèle ne serait affecté lors de la destruction d'un enregistrement de modèle. – Kevin

Questions connexes