5

我正在尝试使我的用户时区成为我的应用程序的当前时区,因此他们交互的所有内容都将由它进行。我在我的 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 是一个设计助手,我的用户模型是一个: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

我怎样才能把它交给后者?

4

2 回答 2

3

Time#zone= method accepts only these params:

  • A Rails TimeZone object.

  • An identifier for a Rails TimeZone object (e.g., “Eastern Time (US & Canada)”, -5.hours).

  • A TZInfo::Timezone object.

  • An identifier for a TZInfo::Timezone object (e.g., “America/New_York”).

So you should pass something from this list

于 2012-08-20T11:15:15.727 回答
3

Time.now.in_time_zone(current_user.time_zone)返回类的实例TimeWithZone,但 Time#zone=期望得到可以转换为TimeZone.

假设您TimeZone在列中存储标识符:time_zone(“东部时间(美国和加拿大)”、“夏威夷”等),您可以简单地做

Time.zone = current_user.time_zone
于 2012-08-22T18:25:46.037 回答