2010-08-21 154 views
11

我想輸出其中一個選擇字段供用戶選擇其時區。我的用戶模型將時區以秒爲單位保存爲整數。但如果這不切實際,我可以改變這一點。TimeZone在Ruby on Rails中選擇字段

事情是這樣的:

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

我看到有一個時間類的Ruby on Rails的......任何人都可以點我在正確的方向?

回答

32

您可以將時區存儲爲字符串。

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

使用此顯示選擇框

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

是的,我看到之前的鏈接!謝謝你的幫助。 – Rimian 2010-08-21 09:06:45

+1

太好了。這是我正在尋找的。謝謝。 – 2011-07-15 15:43:12

+4

該鏈接似乎已經過時,正在將流量導向希臘電影評論? – Jay 2014-01-27 22:53:41

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 

任何人只要有一個更好的/清潔的解決方案?我正在睡覺:)