【问题标题】:How to set the time zone of datetime values in RailsAdmin如何在 RailsAdmin 中设置日期时间值的时区
【发布时间】:2014-01-26 23:10:04
【问题描述】:

Rails Admin 中,编辑记录时,日期时间值始终以 UTC 显示。

当我设置值时,它在我当前的时区设置 (PST) 中被识别。这是我在保存之前在编辑视图中设置的值的图像:

保存后,数值显示为UTC:

有什么方法可以在特定时区显示这些值,以便在 RailsAdmin 中管理日期时间属性不会让用户感到困惑?

【问题讨论】:

  • 我不熟悉 activeAdmin 代码库,但你可能对我写的关于 rails 和 timezones 的这篇博文感兴趣 - jessehouse.com/blog/2013/11/15/… - 我认为在 UTC 中设置你的应用程序,然后覆盖每个请求使用适当的用户时区,rails 应该做正确的事情,除非 activeAdmin 做一些奇怪的事情。
  • 谢谢house9,我去看看。只是为了澄清它的 RailsAdmin,而不是 ActiveAdmin。

标签: ruby-on-rails ruby datetime timezone rails-admin


【解决方案1】:

除了设置默认时区之外,以下要点还解决了我的问题。 PST 日期时间现在显示在 RailsAdmin 视图中。我必须预编译资产才能让它在我的 heroku 环境中运行:

# rails_admin.rb
# https://gist.github.com/jackdesert/7090731

require 'rails_admin/config/fields/base'

module RailsAdmin
  module Config
    module Fields
      module Types
        class Datetime < RailsAdmin::Config::Fields::Base
          def value
            value_in_default_time_zone = bindings[:object].send(name)
            return nil if value_in_default_time_zone.nil?
            pacific_time_zone = ActiveSupport::TimeZone.new('Pacific Time (US & Canada)')
            value_in_default_time_zone.in_time_zone(pacific_time_zone)
          end
        end
      end
    end
  end
end

staging.rbproduction.rb 我指定了 PST 时区:

config.time_zone = 'Pacific Time (US & Canada)'
config.active_record.default_timezone = 'Pacific Time (US & Canada)'

【讨论】:

  • 有没有办法做到这一点,而无需更新模型将时间值保存到本地时间,而只显示本地时间并保存在 UTC?
猜你喜欢
  • 1970-01-01
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 2017-10-10
  • 2021-09-12
相关资源
最近更新 更多