Tengo una pregunta relacionada con la asociación de registros activos, refiriéndose a esta parte de la documentación de Rails:
http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association
Si tenemos tres modelos:
class Physician :appointments end class Appointment < ActiveRecord::Base belongs_to :physician belongs_to :patient end class Patient :appointments end
La documentación dice que la colección de modelos de unión se puede administrar a través de la API de esta manera:
physician.patients = patients
pero, ¿qué sucede si el modelo de cita, como en el ejemplo vinculado, tiene un campo llamado cita_fecha y deseo crear una nueva cita dada el Médico y el Paciente en una fecha específica? El siguiente código creará un registro en la tabla de citas, pero ¿cómo rellenar la cita con cita también en el tercer paso?
physician = Physician.first patient = Patients.first physician.patients << patient
¿Existe algo como esto?
physician.patients.create( :patient => patient, 'appointment.appointment_time' => appointment_time )
Pregunta anterior, pero debe responderse, aunque puede asignar directamente a un physician.patients
con el método <<
, crea una cita sin valores, que puede o no ser válida según las reglas comerciales. Así que la forma más habitual de crear la asociación sería construir la cita en uno de ellos.
demento = Physician.find_by_name('Dr. Demento'} patient = Patient.new { :name => 'Mrs. Holloway' } patient.appointments << Appointment.new { :physician => demento, :appointment_time => appt_time }
podría combinar las líneas 2 y 3, por supuesto, si así lo desea.
la línea en los documentos a los que se refiere
physician.patients = patients
Creo que el caso de uso limitado para eso podría ser que si Demento tuviera 7 pacientes pero pierde a la Sra. Holloway debido a un desafortunado incidente con un experimento de rayos de muerte, podría hacer esto con una lista actualizada de los 6 pacientes existentes y sus citas preservarse, y las citas pasadas de la Sra. Holloway serían eliminadas automáticamente (para borrar cualquier registro de aquí, por razones de seguro de responsabilidad civil, solo Demento sería tan desagradable).
Desea considerar rutas anidadas, por ej.
resources :physicians do resource :patients end
Puedes usar cosas como form_for(@physician, @patient)
y url es como physician/1/patient/23
Para actualizar un paciente en el contexto de un médico.