我对我的模型进行了验证:
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上自动加载的时间将是过去的一段时间,因为选择时间需要一秒多的时间,然后点击“保存”。 / p>
我想过几个解决方案,其中最简单的解决方法是将错误消息读成"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
答案 0 :(得分:1)
我在大型生产网站上实际实施的另一个可能的建议是拥有宽限期。&#34;对我们来说,这个宽限期是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
。