Поле выбора часового пояса в Ruby on Rails - PullRequest
11 голосов
/ 21 августа 2010

Я хочу вывести одно из этих полей выбора, чтобы пользователь мог выбрать свой часовой пояс. Моя модель User сохраняет часовой пояс как целое число в секундах. Но я могу изменить это, если это не практично.

Примерно так:

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

Я вижу, что в Ruby on Rails есть класс времени ... Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

33 голосов
/ 21 августа 2010

Вы можете сохранить часовой пояс в виде строки.

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

Используйте это, чтобы показать поле выбора

<%= f.time_zone_select :time_zone %>
1 голос
/ 04 ноября 2010
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

Кто-нибудь с лучшим / чистым решением? Я ложусь спать :) 1003 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...