2012-11-07 2 views
0

로그인하지 않은 사용자가 시간 표시를 변경하도록 허용하고 있으며 URL의 매개 변수를 통과하는 것이 가장 좋은 방법 인 것처럼 보입니다.URL 매개 변수의 레일 시간대

class ApplicationController < ActionController::Base 
    around_filter :use_time_zone 

    private 
    def use_time_zone(&block) 
     Time.use_zone((params[:time] || Time.zone), &block) 
    end 
end 

을 그리고 이것은 (

그러나 'www.mysite.com?time=Hawaii', 그것은 더 복잡한 것들 중 일부 (예 : '동부 시간을 처리 할 수없는 뭔가를 위해 미국을 위대한 작품을 : 내가 가진 & 캐나다) '), 주소 표시 줄에이 표시가 잘못 표시됩니다.

DST (또는 'PDT'와 같은 다른 약식 양식)와 UTC 오프셋을 params와 함께 사용하는 방법이 있습니까?

+0

TimeZone.lookup 메서드를 사용해 보셨습니까? http://apidock.com/rails/v3.2.8/ActiveSupport/TimeZone/lookup/class – phoet

+0

위의 Time.use_zone과 동일한 이름으로 만 작동합니다. 내가 할 수있는'tzinfo = ActiveSupport :: TimeZone.find_tzinfo ('Hawaii')'그리고 나서'ActiveSupport :: TimeZone.create (tzinfo.name.freeze)'가 제시하는 것처럼, 그러나 그것은 full tz를 사용할 때만 나를 위해 작동한다. 이름. – tyler

답변

0

해결 방법으로 해결했습니다. 다른 사람들이 유용하다고 생각하길 바랍니다. 다음 나는 PARAMS 비아 그 약어를 전달하고 컨트롤러를 선택할 수

# helpers/application_helper.rb 
(...) 
def tz_mapping 
    tzs = Hash.new 
    ActiveSupport::TimeZone.us_zones.reverse.each do |tz| 
    tzs[tz.name.to_s.first(2).downcase] = tz 
    end 
    tzs 
end 

:

는 I 시간대 이름의 제 2 개 문자에 기초하여 키/값 쌍을 생성하기위한 헬퍼 만들어
# controllers/application_controller.rb 
(...) 
around_filter :use_time_zone 

private 

def use_time_zone(&block) 
    zones = { 'ha' => 'Hawaii', 
      'al' => 'Alaska', 
      'pa' => 'Pacific Time (US & Canada)', 
      'ar' => 'Arizona', 
      'mo' => 'Mountain Time (US & Canada)', 
      'ce' => 'Central Time (US & Canada)', 
      'ea' => 'Eastern Time (US & Canada)', 
      'in' => 'Indiana (East)' } 

    Time.use_zone((zones[params[:tz]] || Time.zone), &block) 
end 

그래서 간단한보기는 EAC에 대한 링크를 제공

<% tz_mapping.each do |k,v| %> 
    <%= link_to v, root_path + "?tz=#{k}" %><br /> 
<% end %> 

처럼 보일 수 있습니다 h 시나리오를 사용하고 필요에 따라 사용할 수 있습니다.

관련 문제