2013-04-09 22 views
8

Śledziłem railscast Ryana Bate'a # 106 http://railscasts.com/episodes/106-time-zones-revised, który dodaje ciąg znaków time_zone do modelu użytkownika. Ciąg jest z menu:ActiveSupport :: Lista stref czasowych dla offsetu

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

Próbuję kwerendy wszystkich użytkowników, którzy mają wspólne przesunięcie strefy czasowej (więc mogę wysłać do nich e-maila o określonej godzinie każdego dnia).

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

Nie byłem w stanie uzyskać listy nazw stref czasowych dla określonego przesunięcia. Pluję z TzInfo i ActiveSupport :: TimeZone.zones_map z ograniczonym sukcesem. Czuję, że strefa_map powinna być w stanie zaspokoić moje potrzeby, ale nie byłem w stanie uzyskać danych, które z niego chcę (chociaż widzę to tam!).

Czy podejmuję niewłaściwe podejście? Myślałem, że zamiast tego mogę zapisać przesunięcie GMT na użytkowniku i zapytać w ten sposób?

Moje google-fu mnie zawiodło.

Odpowiedz

15

I już zdobione -

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

Very nice! Przy okazji, nie ma potrzeby na huk "kompaktowy!" ponieważ przypisujesz go do zmiennej, więc może być po prostu "kompaktowy" – MTarantini

+0

Albo spójrz na mapowanie dla wersji 5.1+ http://api.rubyonrails.org/v5.1/classes/ActiveSupport/TimeZone.html –