我正在努力让我的用户时区成为我应用程序的当前时区,所以他们互动的一切都将由它完成。我在ApplicationController中遇到了ArgumentError
我的方法。
application_controller.rb
before_filter :set_user_time_zone
private
def set_user_time_zone
if signed_in?
Time.zone = Time.now.in_time_zone(current_user.time_zone)
end
end
注意:current_user是Devise Helper,我的用户模型是:time_zone
列。
比错误:
invalid argument to TimeZone[]: Mon, 20 Aug 2012 13:16:20 JST +09:00
我不知道从哪里开始。关于如何纠正这个问题的任何想法?
感谢。
更新
class Price
attr_accessible :date
def self.today
where(:date => Date.today)
end
end
如果我的方法有:
def set_user_time_zone
if signed_in?
Time.zone = current_user.time_zone
end
end
我遇到的问题是这样的:
Time.now = US EAST- 2012-08-22 21:17:03 -0400
Time.zone = TOKYO - (GMT+09:00) Tokyo
Time.zone.now 2012-08-23 10:17:03 +0900
这意味着我的所有Date
方法都来自
Time.now = US EAST- 2012-08-22 21:17:03 -0400
什么时候应该
Time.zone.now 2012-08-23 10:17:03 +0900
我怎样才能把它送到后者?
答案 0 :(得分:3)
Time#zone=方法只接受这些参数:
Rails TimeZone对象。
Rails TimeZone对象的标识符(例如,“Eastern Time”(美国和美国)。 加拿大)“, - -5。hours)。
TZInfo :: Timezone对象。
TZInfo :: Timezone对象的标识符(例如, “美国/纽约”)。
所以你应该从这个列表中传递一些东西
答案 1 :(得分:3)
Time.now.in_time_zone(current_user.time_zone)
返回TimeWithZone
类的实例,但是
Time#zone=
期望获得可以转换为TimeZone
的内容。
假设您在TimeZone
列(“东部时间(美国和加拿大)”,“夏威夷”等)中存储了:time_zone
个标识符,您可以直接执行
Time.zone = current_user.time_zone