Предположим, у нас есть три модели ПАЦИЕНТЫ, медсестры и их ассоциативная модель НАЗНАЧЕНИЯ.
На этой неделе все пациенты должны встретиться со своими медсестрами.
У пациента много медсестер, а у медсестры много пациентов. Аналогично, у пациента много посещений, но только по одному на медсестру, а у медсестры много посещений, но только по одному на пациента.
class Patient < ActiveRecord::Base
has_many :appointments
has_many :nurses, :through => :appointments
end
class Nurse < ActiveRecord::Base
has_many :appointments
has_many :patients, :through => :appointments
end
class Appointment < ActiveRecord::Base
belongs_to :patient
belongs_to :nurse
end
Очевидно, НАЗНАЧЕНИЕ принадлежит как пациенту, так и медсестре.
Тем не менее, я также хочу, чтобы медсестра могла отмечать, появился ли пациент. Я реализовал это в рамках миграции следующим образом:
class CreateAppointments < ActiveRecord::Migration
def self.up
create_table :appointments do |t|
t.references :patient
t.references :nurse
t.boolean "present", :default => false
t.timestamps
end
add_index :job_enrollments, ['patient_id', 'nurse_id']
end
def self.down
drop_table :appointments
end
конец
В консоли я мог создать экземпляр всего и мог сделать следующее:
appt = Appointment.new
patient = Patient.new
nurse = Nurse.new
patient.appointments << appt
nurse.appointments << appt
Теперь возникает вопрос: как мне это реализовать, чтобы медсестра в этом назначении могла изменить значение логического значения на ИСТИНА? Пока что я могу изменить значение экземпляра встречи, набрав:
appt.present = true
Но это не то, что я хочу. Я хочу, чтобы медсестра смогла изменить эту связь и не дать пациенту ничего изменить.
Должен ли я просто не использовать для этого богатые ассоциации?