ruby-on-rails - 如何从 Rails 的下拉列表中获取选定的时区

标签 ruby-on-rails ruby datetime timezone

下拉表单中的时区

<%= time_zone_select :time_zone, ActiveSupport::TimeZone.all, nil,
 {:include_blank => false,:prompt=>"Select Time Zone"} %>

选择一些时区并提交表单后,当我执行 params["time_zone"] 时,我得到

"#<ActiveSupport::TimeZone:0x00000001ff5450 @name=%22American Samoa%22, @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Pacific/Pago_Pago>, 
 @current_period=#<TZInfo::TimezonePeriod: #<TZInfo::TimezoneTransitionDefinition: #<TZInfo::TimeOrDateTime: 439038000>,#<TZInfo::TimezoneOffset: -39600,0,SST>>,nil>>, 
#<ActiveSupport::TimeZone:0x00000002024bb0 @name=%22International Date Line West%22, @utc_offset=nil, @tzinfo=#<TZInfo::TimezoneProxy: Pacific/Midway>,..............

如何获取选定的时区? 注意:我将时区保存在字符串中

最佳答案

只需在 ActiveSupport::TimeZone 对象上调用 .name 即可:

irb(main):055:0> ActiveSupport::TimeZone.new("American Samoa").name
=> "American Samoa"

您可以使用自定义 setter 来完成此操作。示例:

class City < ActiveRecord::Base
  # automatically convert ActiveSupport::TimeZone 
  # objects into a serializable string.
  def time_zone=(tz) 
    super(tz.try(:name) || tz)
  end
end

class CitiesController
  def create
    @city = City.create(city_params)
    respond_with(@city)
  end

  def city_params
    params.require(:city).permit(:time_zone)
  end
end

关于ruby-on-rails - 如何从 Rails 的下拉列表中获取选定的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35845738/

相关文章:

ruby-on-rails - Ruby on Rails 应用程序中的 Favicon

ruby-on-rails - rails : delete a flash message inside a custom error controller

javascript - javascript 中的非阻塞 setTimeout 与 ruby​​ 中的 sleep

ruby-on-rails - 你如何记录被调用的回调方法?

python - 时间戳转换关闭一小时

python - 将 datetime timedelta 与 pandas DF 中的系列一起使用

mysql - 将 AUTO_INCREMENT 列添加到 Rails 模型时出错 - MySQL

ruby-on-rails - Rails Select Drop Down for States?

ruby-on-rails - Rails to_json 包含多个 belongs_to 和 has_many 引用

python - 随时间绘制总和