Rails如何验证时间和日期

时间:2013-08-16 08:35:42

标签: ruby-on-rails validation time

嗨,我正试图在Ruby on Rails上做一个小餐馆网站(v.3.2.13)。

您可以在此处查看我当前的配置:How to use params in another action?

现在可以预订一张桌子,但没有验证。我想我必须在form_tag中验证开始时间,结束时间和日期,如下所示:

  • 开始时间必须在将来
  • 新的预订不能在开始和结束时间的同一天完成
  • 结束时间固定为开始时间+ 2小时
  • 日期必须是将来或同一天

确定不应验证结束时间。每个预订持续2个小时,所以我只需要分配值Starttime time + 2 hours。

我尝试使用time_selectdate_select,但格式看起来很奇怪(5i,4i,...),我无法做任何事情。

我应该使用gem进行验证吗?是否可以加总时间(开始时间+2小时)?我可以使用其他格式的时间/日期吗?我是否忘记了进一步验证的方面?

我不知道如何继续。 感谢

3 个答案:

答案 0 :(得分:2)

k我终于用Regex

做了
t=params[:Starttime].scan(/\d\d/)
my_time = t[0] << ":" << t[1] << ":00"
Time.zone.parse(my_time)

这是Time.zone.parse的参考 这最终会给你你想要的时间对象 如果它适合你,请通知我。

答案 1 :(得分:1)

Checkout validates_timeliness gem它使您的模型保持干净和直观,并支持I18n本地化,并提供灵活的错误消息,以进行各种日期/时间比较。

validates_datetime :starts_at, :after => :now
validates_datetime :ends_at, :on_or_after => :two_days_later, :if => :starts_at

def two_days_later
  self.starts_at + 2.hours
end

答案 2 :(得分:0)

您可以使用此解析函数更改您从中选择日期的表单给出的defult格式,它将返回ruby中的日期对象。那么你可以很容易地应用你想要的所有验证。

 Date.parse(yourDate.to_s)

以后检查有date_object.future?的直接方法,因此您可以查看。 是的,你可以在轨道上加上时间,your_time + 2.hours可以增加2小时的时间。