【发布时间】:2015-08-03 14:32:02
【问题描述】:
我正在使用timeliness gem 进行时间和日期验证。
我的事件模型有一个存储“11:15”之类的字符串的时间字段、一个存储日期对象的start_date 和end_date。
我想要以下验证行为:
如果用户尝试在一年中的当天创建一个事件(所以start_date == Date.today),并且时间是过去的(所以如果创建事件时是 15:30 并且用户输入了 11 :30),那么验证应该会失败。即,我们只希望在日期是今天或将来以及时间的位置创建事件,如果日期是今天,在未来强>.
我正在为此尝试以下验证:
validates :time, :presence => true,
:timeliness => { :type => :time, :on_or_after => lambda { if(:start_date == Date.today && :day_of_week.downcase == Date.today.strftime("%A").downcase) then return Time.new(:time.to_s).in_time_zone(:timezone)>Time.now.in_time_zone(:timezone) else return true end } }
但是它的行为不正确。即我能够创建一个 start_date 为 03/08/2015 且时间为 09:00 的事件,尽管它是 03/08/2015 的 15:31!请帮忙!
【问题讨论】:
-
在我看来,你有一个很大的 lambda 表达式,最好定义一个方法而不是 lambda。对我来说很难读。这将变为
validates :time, :presence => true, :timeliness => correct_time。
标签: ruby-on-rails ruby validation ruby-on-rails-4 time