2017-04-09 55 views
0

enter image description hereRails的datetime_select开始时间比用户区的时间

嗨更大!所以,我有一个rails应用程序,在创建出价表单中有一个<%= f.datetime_select :ends_at %>字段。我希望开始时间是用户的当前时间,但允许其他用户在创建此出价后在他们自己的时区中查看ends_at。

所以我需要两方面的帮助:

* 1。如何将选择下拉菜单设置为显示时间大于Time.now的时间,以及是否使用Time.now或Time.zone.now?

* 2。如何根据查看记录的用户时区更改ends_at?

真的很感激! 谢谢:)

回答

1

你有两种选择。

  1. application.rb文件中设置应用程序的时区。这将迫使所有时间都在那个时区。 只有当您的用户在单个时区时才能使用。

  2. 存储用户时区,并使用rails控制器中的around_filter更改每个请求的时区。作为建议的Rails - Setting time_zone dynamically as per user selection

背景

Time.zone.now只会时间戳转换成该时区的Rails环境目前处于哪个除非另有规定总是UTC。

Time.now将始终返回系统时间。

如果你在UTC的后面说-05:00那个时候总是会向前看。

1

如何在控制器中设置Time.zone如何设置当前请求/线程的时区。

您也可以保持用户的时区,这样做:

Time.zone = current_user.time_zone

0

谢谢乡亲! :) 我通过以下方式解决了问题:

  1. 首先将默认时区更改为中央时区。
  2. 然后加入在色器件作为的time_zone,其中用户指定的 按他的时区
  3. 加在应用控制器的周围过滤器,以确保时间 改变用于用户的新的列:

    类ApplicationController的<的ActionController :: Base的 around_filter:user_time_zone,如果:CURRENT_USER

    private 
    
        def user_time_zone(&block) 
        Time.use_zone(current_user.time_zone, &block) 
        end 
    

Ryan Bates发现了一个很好的视频:https://www.youtube.com/watch?v=X-1ISHNEB9U 在使用您的建议和研究更多。