在 Rails 管理员中编辑时更新日期时间对象
datetime object updated when editing in Rails Admin
所以我在 Heroku 上托管的 PostgreSQL 数据库中有一个 Restaurant
table,其中有两个 datetime
列:opens
和 closes
代表每家餐厅的时间表。
我在 Rails 后端使用 Rails Admin。每次我想编辑餐厅时,例如更改餐厅的 phone_number
(注意:不触及 opens
或 closes
),opens
和 closes
当我保存修改并多花一小时时得到更新。例如。如果特定餐厅的 opens
为 12:00,而 closes
为 14:00,则它变为 13:00 和 15:00。
同样,完全不改变 opens
或 closes
我自己。
这可能与我的时区有关:在 application.rb
,我有这个:
# timezone
config.time_zone = 'Paris'
config.active_record.default_timezone = :local
# languages
config.i18n.default_locale = :fr
如何避免日期时间更新?
编辑:
使用的版本:
- rails (5.1.6)
- rails_admin (1.4.2)
我找到了一个 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.rb
和 production.rb
文件中配置时区,并且您必须在部署中预编译资产
所以我在 Heroku 上托管的 PostgreSQL 数据库中有一个 Restaurant
table,其中有两个 datetime
列:opens
和 closes
代表每家餐厅的时间表。
我在 Rails 后端使用 Rails Admin。每次我想编辑餐厅时,例如更改餐厅的 phone_number
(注意:不触及 opens
或 closes
),opens
和 closes
当我保存修改并多花一小时时得到更新。例如。如果特定餐厅的 opens
为 12:00,而 closes
为 14:00,则它变为 13:00 和 15:00。
同样,完全不改变 opens
或 closes
我自己。
这可能与我的时区有关:在 application.rb
,我有这个:
# timezone
config.time_zone = 'Paris'
config.active_record.default_timezone = :local
# languages
config.i18n.default_locale = :fr
如何避免日期时间更新?
编辑:
使用的版本:
- rails (5.1.6)
- rails_admin (1.4.2)
我找到了一个 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.rb
和 production.rb
文件中配置时区,并且您必须在部署中预编译资产