2013-04-09 13 views
8

Ho seguito il railscast # 106 http://railscasts.com/episodes/106-time-zones-revised di Ryan Bate che aggiunge una stringa time_zone al modello Utente. La stringa è dall'elenco a discesa:ActiveSupport :: Elenco TimeZone di stringhe per offset

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

Sto cercando di interrogare tutti gli utenti che condividono una differenza di fuso orario comune (in modo da poter inviare loro una e-mail in un momento particolare di tutti i giorni).

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

Non riesco a ottenere un elenco dei nomi dei fusi orari per un determinato offset. Ho lavorato su TzInfo e ActiveSupport :: TimeZone.zones_map con un successo limitato. Mi sento come se la zone_map fosse in grado di soddisfare i miei bisogni, ma non sono stato in grado di ottenere i dati che voglio da esso (anche se lo vedo lì dentro!).

Sto prendendo l'approccio sbagliato qui? Stavo pensando di poter archiviare l'offset GMT sull'utente e interrogarlo in quel modo?

Il mio google-fu mi ha deluso su questo.

risposta

15

ho calcolato fuori -

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

Very nice! A proposito, non è necessario il botto su 'compatto!' dal momento che lo assegni a una variabile, quindi può essere solo 'compatto' – MTarantini

+0

Oppure guarda la mappatura per 5.1+ http://api.rubyonrails.org/v5.1/classes/ActiveSupport/TimeZone.html –