2

我正在使用 Ruby 2.1.2 和 Rails 4.1.4

tl;博士; 我从像这样的表单(通过参数)进入控制器的用户那里得到一个日期和时间:

pickuptime = params[:appointment][:pickuptime]
(byebug) pickuptime
"01/06/2015 7:26 PM"

我需要确保它是在未来,这样客户就不能在过去创建约会,并且我将客户的 time_zone 存储在数据库中,因为客户可能在不同的地方。

细节:

我通过一个表格在我的控制器中获得时间:

pickuptime = params[:appointment][:pickuptime]
(byebug) pickuptime
"01/06/2015 7:26 PM"

然后我将其转换为 aDateTime以便我可以建立约会记录:

pickuptime = DateTime.strptime(pickuptime, "%m/%d/%Y %l:%M %p")
@appointment = @car.appointments.build(garage_id: garage_id, pickuptime: pickuptime)

我的Appointment模型有一个验证,可确保您无法在过去创建约会:

def pickuptime_is_in_future
  if pickuptime < Time.current
    errors.add(:pickuptime, "Appointment must be in the future")
  end
end

在建立约会时,我想考虑@car.garage.time_zone存储在数据库中的客户 time_zone ( ),例如

pry(main)> Garage.first.time_zone
Garage Load (0.6ms)  SELECT  "garages".* FROM "garages"   ORDER BY "garages"."id" ASC LIMIT 1
=> "Eastern Time (US & Canada)"

现在这行不通。当我在未来创建 1 分钟的约会时,我得到以下信息:

(byebug) pickuptime
Tue, 06 Jan 2015 19:22:00 UTC +00:00
(byebug) Time.current
Wed, 07 Jan 2015 00:21:53 UTC +00:00

这会导致验证失败,尽管约会是在未来创建的,因此应该成功。

任何有关如何正确实施的指导将不胜感激!

4

1 回答 1

0

使用in_time_zone

https://www.reinteractive.net/posts/168-dealing-with-timezones-effectively-in-rails & http://www.elabs.se/blog/36-working-with-time-zones-in -ruby-on-rails提供有关在 rails 中使用时区的好建议。

于 2015-01-07T00:39:35.577 回答