2013-01-19 49 views
0

我有兩個模型約會和時間表,在約會我有一個時間字段叫adate和在時間表我有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 
+0

歡迎來到Stack Overflow。請通過發佈一些適用於問題的[正確格式化](http://stackoverflow.com/editing-help)代碼,所有與**相關的**錯誤消息以及任何樣本來改善您的問題正在測試。另外,請包含一份格式正確的**期望輸出樣本**,以便人們瞭解您嘗試實現的結果。 –

回答

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 

這假定您已經有一些方法可以在約會當天獲得醫生的日程安排。我不太瞭解你的模型,告訴你如何做到這一點。

+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-wday –