0

私はここにあるタイムゾーンでrailscastをフォローしています-http://railscasts.com/episodes/106-time-zones-revised

以下は、タイムゾーン選択入力に使用しているものです。現在、フォームは文字列値をデータベース(つまり、「アラスカ」)に保存します。代わりに、UTCオフセットを整数として保存したいと思います。どうすればこれを行うことができますか?

<%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones
4

1 に答える 1

0

2つのオプションがあり、selectを使用するか、仮想属性を作成することができます。私はおそらく後者のオプションを好むでしょう。

TimeZoneは時間単位のオフセット(秒単位または文字列のみ)を直接提供しないため、collection_selectを直接使用することはできませんが、次のようにselectを使用できます(utc_offsetは秒単位です)。

f.select :time_zone, ActiveSupport::TimeZone.us_zones.map { |z| [z.name, z.utc_offset / 1.hour] }

仮想属性を使用する場合は、すでに使用しているコードを使用しますが、:time_zoneの代わりに:time_zone_nameを使用してから、次のようにモデルを更新します。

def time_zone_name=(value)
  time_zone = ActiveSupport::TimeZone.new(value).utc_offset / 1.hour
end

def time_zone_name
  # time_zone is a number like -9
  ActiveSupport::TimeZone.new(time_zone).name
end

最後のオプションを使用すると、Railsコンソールから、または設定したい場所からでも、オフセットまたは名前でタイムゾーンを設定できるため、私は最後のオプションを好みます。

于 2012-12-04T22:09:25.987 に答える