使用遗留数据库在 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