1

嗨,我仍在尝试用 Ruby on Rails(v. 3.2.13)做一个小餐厅网站。

在这里你可以看到我当前的配置:How to use params in another action?

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

  • 开始时间必须在未来
  • 不能在开始时间和结束时间之间的同一天进行新的预订
  • 结束时间固定为开始时间 + 2 小时
  • 日期必须在未来或同一天

好的结束时间不应该被验证。每个预订持续 2 小时,所以我只需分配值 Start-time+2 hours。

我用 and 尝试过time_selectdate_select但格式看起来很奇怪(5i,4i,...),我对此无能为力。

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

我不知道如何继续。谢谢

4

3 回答 3

2

ki 终于用正则表达式做到了

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

这是 Time.zone.parse的引用, 这最终将为您提供所需的时间对象。
如果它对你有用,请通知我。

于 2013-08-16T12:20:11.710 回答
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
于 2013-09-20T02:20:40.480 回答
0

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

 Date.parse(yourDate.to_s)

为了将来检查,有一种直接的方法,date_object.future?您可以使用它进行检查。是的,您可以your_time + 2.hours将时间加起来,以增加 2 小时的时间。

于 2013-08-16T08:50:33.690 回答