使用遗留数据库在 ActiveRecord 中跳过 UTC 转换
Skipping UTC conversion in ActiveRecord with legacy database
我正在 Rails 应用程序上使用 Ruby,该应用程序利用多个数据库在遗留应用程序之间进行集成。
Rails 应用程序本身有自己的数据库,默认情况下 DateTime 以 UTC 格式存储。遗留数据库以本地时间存储它们的时间。
我需要在当地时间读取和存储旧版 ActiveRecord 模型,同时在 application.rb
中仍然使用 config.time_zone = 'Europe/Oslo'
我最终重写了一些 ActiveRecord::Timestamp 方法。我编写了自己的时间戳模块,我将其包含在需要以本地时间读取和存储数据的模型中。
class CustomerOrder < ActiveRecord::Base
include Timestamp
end
module Timestamp
extend ActiveSupport::Concern
included do
skip_time_zone_conversion_for_attributes << :LastUpdate
skip_time_zone_conversion_for_attributes << :Created
end
private
def current_time_from_proper_timezone
Time.now + Time.now.utc_offset
end
def timestamp_attributes_for_update
[:LastUpdate]
end
def timestamp_attributes_for_create
[:Created]
end
end
我正在 Rails 应用程序上使用 Ruby,该应用程序利用多个数据库在遗留应用程序之间进行集成。
Rails 应用程序本身有自己的数据库,默认情况下 DateTime 以 UTC 格式存储。遗留数据库以本地时间存储它们的时间。
我需要在当地时间读取和存储旧版 ActiveRecord 模型,同时在 application.rb
config.time_zone = 'Europe/Oslo'
我最终重写了一些 ActiveRecord::Timestamp 方法。我编写了自己的时间戳模块,我将其包含在需要以本地时间读取和存储数据的模型中。
class CustomerOrder < ActiveRecord::Base
include Timestamp
end
module Timestamp
extend ActiveSupport::Concern
included do
skip_time_zone_conversion_for_attributes << :LastUpdate
skip_time_zone_conversion_for_attributes << :Created
end
private
def current_time_from_proper_timezone
Time.now + Time.now.utc_offset
end
def timestamp_attributes_for_update
[:LastUpdate]
end
def timestamp_attributes_for_create
[:Created]
end
end