Ruby on rails 如何将rubyonrails用户配置文件设置为user';什么是当地时区?

Ruby on rails 如何将rubyonrails用户配置文件设置为user';什么是当地时区?,ruby-on-rails,ruby,ruby-on-rails-3,timezone,Ruby On Rails,Ruby,Ruby On Rails 3,Timezone,在我的Rails 3应用程序中,我有: class Profile < ActiveRecord::Base belongs_to :user attr_accessible :time_zone validates_inclusion_of :time_zone, in: ActiveSupport::TimeZone.zones_map(&:name) before_create :set_defaults private def set_d

在我的Rails 3应用程序中,我有:

class Profile < ActiveRecord::Base

  belongs_to :user

  attr_accessible :time_zone

  validates_inclusion_of :time_zone, in: ActiveSupport::TimeZone.zones_map(&:name)

  before_create :set_defaults

  private

  def set_defaults
    self.time_zone = ActiveSupport::TimeZone["London"]
  end

end
类配置文件
当用户首次注册时,如何将其设置为当前用户的系统时间默认值

现在,我有了self.time\u zone=ActiveSupport::TimeZone[“London”]
,如您所见。但这是静态的,甚至没有通过我上面定义的验证方法

有人能帮忙吗?

一个主意

gem文件中包含
gem“时区”

注册后,从地址或zipcode更新用户的时区


登录后,将时间转换为用户时间。在时区(“时区”)

中有一个Gem,使此操作非常简单

其他选择包括

  • 由用户手动设置(准确,但谁愿意这样做)
  • 根据电话号码或邮政编码设置(这些可能是可选字段,我的电话号码不来自时区)
  • 从IP地址设置(代理)
来自手册

在您的文件中:

gem 'detect_timezone_rails'
在Javascript清单(即application.js)中需要detect_时区和jquery.detect_时区

然后在其他地方,使用插件将其连接起来(记住对于插件也需要jquery)

如果使用标准rails表单帮助程序生成时区选择,则可以传递 调用
set_timezone
时的
format
选项,仅返回城市名称:

$(document).ready(function(){
    $('#your_input_id').set_timezone({format: 'city'});
})

您的验证正在检查
:时区
是否在时区名称列表中,但您正在分配实际的时区对象。尝试:

def set_defaults
  self.time_zone = "London"
end
并默认为当前系统的时区:

def set_defaults
  self.time_zone = (Thread.current[:time_zone] || Time.zone_default).name
end

非常感谢。这似乎是有道理的,但问题是我的验证方法似乎不接受这一点。通常,新的配置文件将与任何新用户一起自动创建。但是,当尝试上面的任何代码或我的代码时,我得到一个
配置文件为nil
错误。很有趣。你能试着运行
Profile.create吗rails控制台中的code>查看验证错误?现在它可以工作了。我得到的错误与这个类无关。您提供的代码非常有用。非常感谢你的帮助。这次我选择了Ash的解决方案,因为我在寻找纯Ruby的解决方案。不过,我会在下一个项目中记住jQuery版本。
def set_defaults
  self.time_zone = "London"
end
def set_defaults
  self.time_zone = (Thread.current[:time_zone] || Time.zone_default).name
end