Rails 3:如何防止我的validation从time_select下拉菜单中传递“nil time”?

我使用time_select和提示(“选择小时”……)并且想确保用户实际输入有效时间。 但是如果在没有选择时间的情况下提交表单(因此选择了空提示选项),我的validation不会出现任何错误。

我的validation:

validates :start_time, :presence => true, :allow_nil => false, :allow_blank => false 

原因是rails将time_select字段的输入自动转换为此日期,当它们为空时:

 0001-01-01 00:00:00 

有没有一种很好的方法可以防止这种情况发生?

谢谢!

如果你想强制执行validation,至少从这篇SOpost和这篇SOpost看 ,你会想要进行自定义validation。

 class Whatever < ActiveRecord::Base validate :time_scope ... private def time_scope if Whatever.where().time == "0001-01-01 00:00:00" errors.add(:time, "Oh no you didn't enter that garbage time on my watch!") end end end 

显然这是一个愚蠢的例子,但我希望它能得到这个想法。