2013-01-19 6 views
0

두 가지 모델이 있습니다. 약속 및 일정, 약속 있음 시간 필드에 adate가 있고 일정에 따라 start_time 및 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 

유효성을 검사해야하지만이를 구현해야합니까?

모델 http://guides.rubyonrails.org/active_record_validations_callbacks.html#custom-methods에서

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 
+0

스택 오버플로에 오신 것을 환영합니다. 문제에 적용한 [올바른 형식의] 코드 (http://stackoverflow.com/editing-help), ** ** 관련 ** 오류 메시지가 표시된대로 정확하게 올리십시오. 맞서 싸울거야. 또한 적절하게 형식화 된 ** 예상 출력 샘플을 포함 시켜서 달성하고자하는 결과를 이해할 수 있도록하십시오. –

답변

1

, 당신은 검증을위한 임의의 방법을 작성하는 방법을 볼 수 있습니다.

귀하의 경우이 양식을 작성하실 것입니다.

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 

이것은 이미 약속 당일 의사의 일정을 알아낼 수있는 방법이 있다고 가정합니다. 어떻게하는지 알려주는 모델에 대해서는 충분히 알지 못합니다.

+0

나는 또한 그 날을 검증해야하지만 약속 모델 내에서 일정 모델로 어떻게 작업 할 수 있는지 보여 주었다는 것을 알고 있습니다. 나는 추측 할 수있는 다른 방법을 만들 수 있습니다. – evanx

+0

나는 문제가있다 : cwday를 사용할 수있는 날짜를 추출하기 위해 1에서 7까지 출력 할 수 있지만 Date :: DAYNAMES.zip (0..6) .to_a를 내 필드에 사용했다. . 불일치가 있음을 알 수 있듯이 날짜에 요일 (월요일, 화요일, ...)을 채우고 숫자를 저장하는 도우미가 있습니까? 아니면이 사용자 지정 도우미를 만들어야합니까? – evanx

+0

.wday 사용 대신 DAYNAMES와 정확하게 일치하는 숫자를 반환합니다. http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/Date.html#method-i-weed –

관련 문제