2013-04-09 11 views
8

私はRyan Bateのrailscast#106 http://railscasts.com/episodes/106-time-zones-revisedに従いました。これはユーザーモデルにtime_zone文字列を追加します。文字列には、ドロップダウンリストから、次のとおりです。私は、オフセット共通の時間帯を共有するユーザーのすべてを照会しようとしていますActiveSupport :: TimeZoneオフセットの文字列のリスト

= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones 

(私は特定の時間毎日それらに電子メールを送信することができます)。

User.where(:time_zone => ['Guadalajara','Central America','Mexico City', 'Monterrey', 'Saskatchewan']) 

特定のオフセットのタイムゾーン名のリストを取得できませんでした。私はTzInfoとActiveSupport :: TimeZone.zones_mapを試してみましたが、成功は限られていました。私は、zones_mapが私のニーズを満たすことができるはずだと思っていますが、私はそこから見たいデータを得ることができませんでした。

私はここで間違ったアプローチをとっていますか?私は代わりにGMTオフセットをユーザーに保存し、その方法でクエリを実行できると思っていましたか?

私のgoogle-fuは、この1つを私に任せました。

答えて

15

私はそれを考え出した -

tz_names = ActiveSupport::TimeZone.zones_map.values.collect{|z| z.name if z.utc_offset == offset}.compact 
+2

非常に素晴らしいです! Btw、「コンパクト」の強打は必要ありません。変数に代入するので、ちょうど「コンパクト」にすることができます – MTarantini

+0

または5.1+ http://api.rubyonrails.org/v5.1/classes/ActiveSupport/TimeZone.htmlのマッピングを見てください –