2016-07-21 75 views
0

我有我的模型中,這驗證後觸發錯誤時,第二個已經過去:驗證時間不過去沒有你所選擇的時間

def time_in_future 
    if start_at? 
    errors[:base] << 'The Start Date can not be in the past.' if start_at < Time.zone.now 
    end 
end 

但每次我試圖挽救我得到的錯誤我要求在我的驗證中,這是有道理的。我假設,因爲時間是第二次,無論我什麼時候保存,自動加載到我的datetimepicker的時間將會是過去的一段時間,因爲選擇時間需要一秒多的時間,然後單擊「保存」。

我想到了一些解決方案,其中最簡單的方法是將錯誤信息讀取爲"The Start Date must be a time in the Future."。或者,在保存之前,將來會有一段時間自動保存start_at時間,我想了15分鐘。

我認爲這一定是人們經常遇到的情況,有沒有更好或更常見的方法來解決這種情況?

我很欣賞你的意見。

編輯:

服用後輸入我的更新方法:「寬限期」

def time_in_future 
    if start_at? do 
     errors[:base] << 'The Start Date must be in the future. Seconds count!' if start_at < DateTime.current + 15.minutes 
    end 
    end 
end 
+1

什麼是「start_at?」方法?它檢查「start_at?」首先在它下面檢查一個「start_at」(屬性,我假設) –

+1

我剛剛有一個巨大的'時間'頭痛,我學到的是絕對使用'DateTime.current',只要你可以。它有時區。你可能可以做'(start_at + 1.minute)

+0

@RonanLopes start_at?只是在檢查日期是否在未來之前檢查是否存在日期。我在開發方面還很新,有沒有更好的方法來寫這個? – Lenocam

回答

1

另一個可能的建議,我實際上已經在大規模生產基地實行的是有對我們來說,這個寬限期是2個小時,但可能短到幾秒鐘 - 這取決於您的確切需求。

所以,我的代碼看起來是這樣的:

def time_in_future 
    if start_at? 
    errors[:base] << 'The Start Date can not be in the past.' if start_at < Time.current + 2.hours 
    end 
end 

這種模式的好處是,2.hours可以每環境進行設置,這將使測試和故障排除的模型的其他方面,其涉及start_at更容易。

相關問題