5

En la guía de asociaciones de Rieles, demuestran una relación mediante has_many muchos-a-muchos: a través de este modo:Adición y eliminación de un has_many: a través de relación

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 

¿Cómo puedo crear y eliminar las citas?

Si tengo un @physician, ¿escribo algo como lo siguiente para hacer una cita?

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

¿Qué hay de código para eliminar o destruir? Además, si un paciente ya no existía en la tabla de citas, ¿se destruirá?

Respuesta

7

En su código de crear una cita, no es necesaria la segunda línea, y el uso de #build método en lugar de #new:

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

Para destruir un registro de cita simplemente podría encontrar y destruir:

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

Si desea destruir los registros de cita junto con la destrucción de un paciente, es necesario agregar el: ajuste de la dependencia a has_many:

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

Gracias, supongo que eliminar la cita también eliminará al médico del paciente y viceversa? – dteoh

+1

No, no lo hará a menos que agregue ': dependency =>: destroy' a' belongs_to'. – Kevin

+0

En realidad, la configuración ': dependency' simplemente agrega un gancho before_destroy al modelo. Sin esto, ningún otro modelo se vería afectado al destruir un registro modelo. – Kevin

Cuestiones relacionadas