【问题标题】:datetime object updated when editing in Rails Admin在 Rails Admin 中编辑时更新日期时间对象
【发布时间】:2019-01-17 11:22:17
【问题描述】:

所以我在 Heroku 上托管的 PostgreSQL 数据库中有一个 Restaurant 表,其中有两个 datetime 列:openscloses,它们代表每家餐厅的时间​​表。

我在 Rails 后端使用Rails Admin。每次我想编辑餐厅时,例如更改餐厅的 phone_numberNB:无需触摸 openscloses),openscloses 都会在我保存修改并获得一小时后更新。例如。如果特定餐厅的 opens 是 12:00,closes 是 14:00,则它变为 13:00 和 15:00。

同样,完全不改变 openscloses 我自己。

这可能与我的时区有关:在application.rb,我有这个:

# timezone
config.time_zone = 'Paris'
config.active_record.default_timezone = :local

# languages

config.i18n.default_locale = :fr 

我能做些什么来避免日期时间更新?

编辑:

使用的版本:

  • 导轨 (5.1.6)
  • rails_admin (1.4.2)

【问题讨论】:

  • 你能发布 Rails 和 Rails Admin 版本吗?
  • 嗨@DimitriusLachi,我编辑了我的帖子以添加版本:)
  • 嘿@DimitriusLachi,使用您删除的解决方案,但将时区设置为London 而不是Paris 似乎可以解决问题!这不是一个完美的解决方案,因为我应该能够获得正确的时区并在没有此类问题的情况下更新我的表格。但这现在应该很好。
  • 很好,我重新发布,答案,我会更新解释一下

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


【解决方案1】:

我找到了一个 githubGist 将您的时区明确设置为 RailsAdmin:

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

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('Europe/Paris')
             value_in_default_time_zone.in_time_zone(pacific_time_zone)
           end
        end
      end
    end
  end
end

这需要您在 staging.rbproduction.rb 文件中配置时区,并且您必须在部署中预编译资产

【讨论】:

  • 感谢您的帮助?那么巴黎会是什么? ActiveSupport::TimeZone.new('Europe/Paris') ?
  • api.rubyonrails.org/classes/ActiveSupport/TimeZone.html 是这个,更新了。告诉我这是否有效:)
  • 将其添加到我的config/initializers/rails_admin.rb 后,启动服务器时出现错误
  • 你忘了复制一些'end`吗?
  • 确实哈哈我最后少了一个end关键字。
猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多