Ruby on rails 如何将rubyonrails用户配置文件设置为user';什么是当地时区?
在我的Rails 3应用程序中,我有: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
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