如何更新has_many:通过表?

时间:2017-07-13 16:09:57

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-5

这是我之前提出的一个问题的后续问题: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值更新约会表。我应该如何更新约会表以及我应该在哪里放置相同的代码?

1 个答案:

答案 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)

关于放置它的位置,取决于系统的工作方式。是自己分配的客户吗?或者一些管理员这样做? 无论如何,认为你应该有另一个动作/视图来完成该任务,所以你可以有一个表单,用户可以输入该信息,当他发送表单时,你处理它并以某种方式进行更新,如之前显示

希望这会有所帮助,祝你好运