5

ユーザーのタイムゾーンをアプリケーションの現在のタイムゾーンにして、ユーザーがやり取りするすべてのものがそれによって行われるようにしようとしています。ArgumentErrorしかし、ApplicationController内のメソッドに遭遇しました。

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であり、列としての私のUserモデルです。

エラーより:

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 =メソッドは、次のパラメータのみを受け入れます。

  • RailsTimeZoneオブジェクト。

  • Rails TimeZoneオブジェクトの識別子(例:「EasternTime(US&Canada)」、-5.hours)。

  • TZInfo::Timezoneオブジェクト。

  • TZInfo :: Timezoneオブジェクトの識別子(例:「America / New_York」)。

したがって、このリストから何かを渡す必要があります

于 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 に答える