添加到数据库时的Ruby验证

时间:2014-06-22 17:18:25

标签: ruby-on-rails ruby

我是Ruby的新手,我正在完成我的项目的最后一步,当我试图添加约会时,如果医生在那个时间工作,我必须改变。我不知道该怎么做:(

这是我的数据库的工作原理:

在预约中,我有data_wizyty(visit_date),doctor_id和godzina_wizyty(visit_time) - 这是我的添加形式。

在日程表中我有: dzien_tygodnia(day_of_the_week),poczatek_pracy(start_working),koniec_pracy(end_working)和doctors_workplace_id

在doctors_workplace: doctor_id,schedule_id,clinic_id

我想在选择的日期和时间检查任何诊所是否有医生:) 请在这件事上给予我帮助 :) 我已经验证了日期和时间是否是唯一的:

class Appointment < ActiveRecord::Base
    validates :doctor_id, uniqueness: { scope: [:data_wizyty, :godzina_wizyty], message: 'Ten termin jest juz zajety!' }
end

我需要检查它是否是唯一的以及医生是否有效。

预约:

class Appointment < ActiveRecord::Base
    validates :doctor_id, uniqueness: { scope: [:data_wizyty, :godzina_wizyty], message: 'Ten termin jest juz zajety!' }
    after_initialize :aInit
    after_save :aSave

    belongs_to :patient
    belongs_to :doctor
    belongs_to :schedule
    belongs_to :refferal
    belongs_to :clinic

    has_many :employees

    include MultiStepModel

    def self.total_steps
        3
    end

    def aInit 
        @wymaga_Potwierdzenia = true 
    end

    def aSave
        if self.refferal_id == nil
            @potwierdzona = false
        else
            @potwierdzona = true
        end
        if self.wymaga_Potwierdzenia == false
            @potwierdzona = true
        end
    end

end

时间表:

class Schedule < ActiveRecord::Base

    has_many :appointments
    belongs_to :clinic
    belongs_to :doctors_workplace

    def full_schedule
        "#{dzien_tygodnia} : #{poczatek_pracy} - #{koniec_pracy}"
    end

end

Doctors_workplace:

class DoctorsWorkplace < ActiveRecord::Base

has_many :schedules
belongs_to :doctor
belongs_to :clinic_surgery

end

现在我有这样的事情:

def check_doctor_available
        if Schedule.where(doctor: doctor, dzien_tygodnia: data_wizyty.wday)
               .where('poczatek_pracy < ? and koniec_pracy > ?', godzina_wizyty, godzina_wizyty).empty?
      self.errors.add(:doctor, message: 'nie pracuje w tym terminie!')
    end

这就是我现在所拥有的:

def check_doctor_available
        if DoctorsWorkplace.where(doctor_id: doctor_id) and
           Schedule.where(doctors_workplace_id: ????, dzien_tygodnia: data_wizyty.wday)
               .where('poczatek_pracy < ? and koniec_pracy > ?', godzina_wizyty, godzina_wizyty).empty?
      self.errors.add(:doctor, message: 'nie pracuje w tym terminie!')
    end

1 个答案:

答案 0 :(得分:1)

您可以使用自定义验证。在约会中创建一个私人方法,检查医生是否在给定的日期/时间可用。

validate :check_doctor_available

private
def check_doctor_available
  #your implementation
end

如果您对自定义验证方法中的内容有任何疑问,请查看this