Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails中的时区选择字段_Ruby On Rails_User Interface_Timezone - Fatal编程技术网

Ruby on rails RubyonRails中的时区选择字段

Ruby on rails RubyonRails中的时区选择字段,ruby-on-rails,user-interface,timezone,Ruby On Rails,User Interface,Timezone,我想输出其中一个选择字段,供用户选择时区。我的用户模型将时区保存为以秒为单位的整数。但如果这不实际,我可以改变 大概是这样的: <select> ... <option value="x">+9:00 (Darwin, Australia)</option> <option value="x">+10:00 (Sydney, Australia)</option> ... </select> ... +9

我想输出其中一个选择字段,供用户选择时区。我的用户模型将时区保存为以秒为单位的整数。但如果这不实际,我可以改变

大概是这样的:

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

...
+9:00(澳大利亚达尔文)
+10:00(澳大利亚悉尼)
...

我看到RubyonRails中有一个时间类。。。有人能给我指出正确的方向吗?

你可以将时区存储为字符串

  def self.up
    add_column :users, :time_zone, :string, :limit => 255, :default => "UTC"
  end
使用此选项可显示选择框

<%= f.time_zone_select :time_zone %>

时区和名称=[]
TZInfo::时区。所有链接的分区。每个都有|
时区差异和名称tz.current\u period.utc\u总偏移量/(60*60)}
结束
sorted_timezones=timezones_diff_and_name.sort_by{| timezone | timezone.values[0]}
@时区={}
已排序的时区。每个都有|
差异=tz.值[0]
name=tz.keys[0]
@时区[“(GMT{diff>0?'+':''}{diff.to_s}h){name}]=name
结束


谁有更好/更清洁的解决方案?我要睡觉了:)

是的,我以前看到过这个链接!谢谢你的帮助,太好了。这就是我要找的。谢谢。该链接似乎过时了,正在将流量指向希腊电影评论?
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