0

我有两个模型 Appointment 和 Schedule,在 Appointment 中我有一个名为 adate 的时间字段,在 schedule 中我有 start_time 和 end end_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 回答