2013-04-09 35 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,並取得了有限的成功。我覺得zone_map應該能夠滿足我的需求,但是我一直無法從中獲得所需的數據(儘管我在這裏看到它!)。

我在這裏採取了錯誤的做法?我想我可以將GMT偏移量存儲在用戶身上,並以這種方式查詢?

我的google-fu讓我失望。

回答

15

我已經想通了 -

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

很不錯的! 順便說一句,沒有必要在'緊湊!因爲你將它分配給一個變量,所以它可以只是'緊湊' – MTarantini 2016-03-22 15:03:19

+0

或者查看5.1+的映射http://api.rubyonrails.org/v5.1/classes/ActiveSupport/TimeZone.html – 2017-09-30 02:39:50