2

Pretty simple, I need to disable time zone conversion for specific columns. I will handle any TZ conversion manually, but I need Rails 3 to forego conversion in both writing and reading, and any AREL functions. But, I don't want to disable the conversion for non-specified attributes.

Ok, I know how to disable it for reading:

self.skip_time_zone_conversion_for_attributes = [:test_timestamp]

But this only works for reading. When writing the attribute, it still converts to UTC (yes, I tested this in 3.2.8).

4

1 に答える 1

0

お気づきのようskip_time_zone_conversion_for_attributesに、読み取りにのみ機能するため、機能全体がほとんど役に立たなくなります。

考えられる解決策は 2 つあります。

1.-時刻が UTC で書き込まれることを受け入れ、それに応じて読み取ります。

def starts_at # override reader method
  attributes['starts_at'].in_time_zone(whatever_timezone)
end

短所:使用時にオーバーライドされたメソッドがバイパスされますMyModel.pluck(:starts_at).

2.-時間値を文字列として保存し、値を正しい形式で書き込み、目的のタイムゾーンで読み取るようにします。

def starts_at
 DateTime.strptime(attributes['starts_at'], whatever_format).in_time_zone(whatever_timezone)
end

短所: 日付演算子 (より小さい、より大きい) を使用してデータベースをクエリする機能が失われます。

于 2016-02-07T01:54:55.453 に答える