2010-08-21 13 views
11

Quiero mostrar uno de esos campos de selección para que el usuario seleccione su zona horaria. Mi modelo de usuario guarda la zona horaria como un entero en segundos. Pero puedo cambiar eso si no es práctico.Campo TimeZone Select en Ruby on Rails

Algo como esto:

<select> 
    ... 
    <option value="x">+9:00 (Darwin, Australia)</option> 
    <option value="x">+10:00 (Sydney, Australia)</option> 
    ... 
</select> 

veo que hay una clase de tiempo en Ruby on Rails ... ¿Puede alguien me punto en la dirección correcta?

Respuesta

32

Puede almacenar la zona horaria como una cadena.

def self.up 
    add_column :users, :time_zone, :string, :limit => 255, :default => "UTC" 
    end 

Utilice esta opción para mostrar el cuadro de selección

<%= f.time_zone_select :time_zone %> 
+1

Sí, ¡vi ese enlace antes! Gracias por tu ayuda. – Rimian

+1

Genial. Esto es lo que estoy buscando. Gracias. –

+4

El enlace parece estar desactualizado y está dirigiendo el tráfico a las reseñas de películas griegas. – Jay

1
timezones_diff_and_name = [] 
    TZInfo::Timezone.all_linked_zones.each do |tz| 
    timezones_diff_and_name << {tz.name => tz.current_period.utc_total_offset/(60 * 60)} 
    end 

    sorted_timezones = timezones_diff_and_name.sort_by { |timezone| timezone.values[0] } 

    @timezones = {} 
    sorted_timezones.each do |tz| 
    diff = tz.values[0] 
    name = tz.keys[0] 
    @timezones["(GMT#{diff > 0 ? '+':''}#{diff.to_s}h) #{name}"] = name 
    end 

Cualquier persona con una solución mejor/más limpio? Me voy a la cama :)