2010-08-21 17 views
11

Kullanıcıların kendi saat dilimlerini seçmeleri için bu seçme alanlarından birini çıktı almak istiyorum. Kullanıcı modelim, saat dilimini saniyeler içinde bir tam sayı olarak kaydeder. Ama pratik değilse bunu değiştirebilirim. BöyleTimeZone Ruby on Rails alanı seç

şey:

Ben Ruby on Rails bir süre Sınıf olduğunu görüyoruz
<select> 
    ... 
    <option value="x">+9:00 (Darwin, Australia)</option> 
    <option value="x">+10:00 (Sydney, Australia)</option> 
    ... 
</select> 

... kimse bana doğru yönde işaret edebilir?

cevap

32

Saat dilimini bir dize olarak saklayabilirsiniz.

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

bunu kullanın select box

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

Evet, daha önce bu bağlantıyı gördüm! Yardım ettiğin için teşekkür ederim. – Rimian

+1

Harika. Aradığım şey bu. Teşekkürler. –

+4

Bağlantı modası geçmiş gibi görünüyor ve trafiği Yunan film yorumlarına yönlendiriyor mu? – 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 

daha iyi/temizleyici solüsyon ile herkes göstermek için? Ben yatmaya gidiyorum :)