2014-10-09 82 views
0

我希望我對Rails的經驗不足是沒有其他人似乎遇到這個問題,並且有一個簡單的答案。目前,雖然,我很難過。快速和骯髒的是,我有一個模型,代表每天的日程安排(按日期開放和關閉時間)。在尋找驗證這些日期時間屬性的方法時,我在這裏遇到了幾個線程,這些線程建議使用我已經完成的validates_timeliness gem。我寫了一些簡單的單元測試來檢查我想要遵守的對象的規則,並且在新的驗證似乎能夠工作的情況下,它不會爲ActiveModel對象的錯誤集合中添加任何內容。Rails:日期驗證及時性,但沒有錯誤信息

示範段:

class OverrideSchedule < ActiveRecord::Base 
    validates :close, :open, :schedule_id, presence: true 
    validates_datetime :open, :after => lambda { DateTime.now }, :after_message => "must be a future date/time" 
    validates_datetime :close, :after => :open, :after_message => "must be after the open date/time" 
    attr_accessible :close, :open, :schedule_id 
end 

單元測試代碼片段:

test "open time must be in the future" do 
    assert past_override_schedule.invalid? #<--- This assert succeeds 
    assert past_override_schedule.errors[:open].any? #<--- This assert fails 
end 

test "close time must be after open time" do 
    assert close_before_open_override_schedule.invalid? #<--- This assert succeeds 
    assert close_before_open_override_schedule.errors[:close].any? #<--- This assert fails 
end 

我查了.errors集合在我的單元測試一個看跌的任何鍵和大小。沒有鑰匙,大小始終爲0.我在驗證語句的語法中遺漏了一些簡單的東西嗎?這是正常的,來自時效性的預期行爲?我很感謝您的任何意見。

回答

0

你需要的東西是這樣的:

validate :future_date 



def future_date 
    if open <= Time.now 
    errors.add(:override_schedule, "must be a future date/time") 
    end 
end 

也許不是正是你所需要的邏輯,但這是語法。爲第二次驗證做同樣的事情。