0

AppointmentとScheduleの2つのモデルがあり、Appointmentにはadateという時間フィールドがあり、scheduleにはstart_timeフィールドとendend_timeフィールドがあります。

adateの値をstart_timeおよびend_time内の値と比較して、その時間に予約できるかどうかを確認したいと思います。

これらの値を比較するにはどうすればよいですか?

  create_table "appointments", :force => true do |t|
    t.integer  "doctor_id"
    t.date     "adate"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.time     "atime"
  end

  create_table "schedules", :force => true do |t|
    t.string   "day"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
    t.integer  "doctor_id"
    t.time     "start_time"
    t.time     "end_time"
  end

検証である必要がありますが、これを実装する必要がありますか?

モデル

class Appointment < ActiveRecord::Base
  attr_accessible :adate, :atime, :doctor_id  
  validates :adate, :presence => true     
  belongs_to :doctor
  validates_date :adate, :after => lambda { Date.current }  
end

class Schedule < ActiveRecord::Base
  attr_accessible :doctor_id, :day, :end_time, :start_time  
  belongs_to :doctor
end
4

1 に答える 1

1

http://guides.rubyonrails.org/active_record_validations_callbacks.html#custom-methodsから、検証用の任意のメソッドを作成する方法を確認できます。

あなたの場合、あなたはおそらくこの形の何かを書くでしょう。

class Appointment < ActiveRecord::Base
    # ... All the other stuff
    validate :appointment_time_is_valid_for_day

    def appointment_time_is_valid_for_day
        # TODO: Get the schedule for that day/doctor.
        unless schedule.start_time <= atime and
          atime <= schedule.end_time
            errors.add(:atime, "Doctor's not in at this time")
        end
    end
end

これは、予約日に医師のスケジュールを取得する方法がすでにあることを前提としています。私はあなたのモデルについてこれを行う方法をあなたに教えるのに十分なことを知りません。

于 2013-01-19T20:04:35.623 に答える