这是我之前提出的一个问题的后续问题:How to Model doctor and patient relation 我对rails很新,我正在预约患者和医生之间的预约系统,我建立了关系,使用设计设置身份验证。我有3个型号:
class Doctor < ApplicationRecord
has_many :appointments
has_many :patients, through: :appointments
end
class Patient < ApplicationRecord
has_many :appointments
has_many :doctors, through:appointments
end
class Appointment < ApplicationRecord
#table_columns: id | start_time| end_time| doctor_id| patient_id|slot_taken|
belongs_to :patient
belongs_to :doctor
end
我创建了约会控制器:有些操作如下:
#current_doctor comes from devise. Have created two separate models for doctor and patients using devise
def create
@appointment = current_doctor.appointments.build(appointment_params)
respond_to do |format|
if @appointment.save
format.html { redirect_to appointments_path, notice: 'Appointment was successfully created.' }
else
format.html { render :new }
end
end
end
def update
respond_to do |format|
if @appointment.update(appointment_params)
format.html { redirect_to appointments_path, notice: 'Appointment was successfully updated.' }
else
format.html { render :edit }
end
end
end
private
def appointment_params
params.require(:meeting).permit(start_time, end_time)
end
正如您所看到的,医生可以创建他可用的时间段,并可以为他/她自己编辑,更新和销毁它们,当他创建一个时,约会表更新为doctor_id,start_time和end_time 。
现在,我应该怎么做才能添加patient_id并将slot_taken更改为true(默认值:false)?当患者预订可用的插槽时,应使用patient_id和slot_taken值更新约会表。我应该如何更新约会表以及我应该在哪里放置相同的代码?
答案 0 :(得分:0)
首先,一些建议:我不认为两个用户模型是个好主意。认为最好有一个User
设计模型,并且该用户与之关联Role
,因此您可以通过该模型控制访问类型。如果您必须向该系统添加更多类型的用户,则为每个用户创建一个模型可能会令人不安。
关于约会,问题,粗略地说,如果您有一个doctor
实例,并且您想在s
start_time和e
end_time预约某位患者,可以做类似的事情:
doctor.appointments.find_by(start_time: s, end_time: e).update(patient_id: your_patient_id)
关于放置它的位置,取决于系统的工作方式。是自己分配的客户吗?或者一些管理员这样做? 无论如何,认为你应该有另一个动作/视图来完成该任务,所以你可以有一个表单,用户可以输入该信息,当他发送表单时,你处理它并以某种方式进行更新,如之前显示
希望这会有所帮助,祝你好运