在我的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_zone = ActiveSupport::TimeZone["London"]
。但这是静态的,甚至没有超过我在上面定义的验证方法。
有人可以帮忙吗?
答案 0 :(得分:1)
有一种宝石使这很容易。
其他选项包括
来自手册
在你的Gemfile中:
gem 'detect_timezone_rails'
在Javascript清单中需要detect_timezone和jquery.detect_timezone(即application.js)
//= require detect_timezone
//= require jquery.detect_timezone
然后在其他地方,使用插件连接它(记得也需要jquery插件)
$(document).ready(function(){
$('#your_input_id').set_timezone();
});
如果您使用标准rails形式助手来生成时区选择,您可以通过
在致电format
时,set_timezone
选项仅返回城市名称:
$(document).ready(function(){
$('#your_input_id').set_timezone({format: 'city'});
})
答案 1 :(得分:1)
您的验证是检查:time_zone
是否在TimeZone 名称列表中,但您正在分配实际的TimeZone对象。尝试:
def set_defaults
self.time_zone = "London"
end
默认为当前系统的时区:
def set_defaults
self.time_zone = (Thread.current[:time_zone] || Time.zone_default).name
end
答案 2 :(得分:0)
一个想法
在 Gemfile
中加入gem 'timezone'
注册后,从地址或邮政编码更新用户的时区。
登录后将时间转换为user_time.in_time_zone('timezone')