복붙노트

[RUBY-ON-RAILS] 3 레일 : 현재 사용자의 시간대로 시간대를 설정

RUBY-ON-RAILS

3 레일 : 현재 사용자의 시간대로 시간대를 설정

나는 응용 프로그램 컨트롤러에이를 넣어 :

before_filter :set_timezone 

def set_timezone  
Time.zone = current_user.time_zone 
end  

그러나 나는 항상 오류가 발생합니다 :

undefined method time_zone for #<User:0xa46e358>

난 그냥 이유를 알고하지 않습니다 ...

나는 누군가 캔의 도움을 바란다

해결법

  1. ==============================

    1.최대 일 - ryandaigle.com 기사는 당신이 사용자에게 속성으로 "TIME_ZONE"를 추가 마이그레이션을 생성하기 위해 필요한이 작성자에 대한 링크를 언급

    최대 일 - ryandaigle.com 기사는 당신이 사용자에게 속성으로 "TIME_ZONE"를 추가 마이그레이션을 생성하기 위해 필요한이 작성자에 대한 링크를 언급

    (이 레일 2.X 구문 기사에서이다)

    $ script/generate scaffold User name:string time_zone:string
    $ rake db:migrate
    

    나중

    <%= f.time_zone_select :time_zone, TimeZone.us_zones %>
    

    당신의 .time_zone는 method_missing을 반환하는 이유 - 아직 사용자에 TIME_ZONE를 저장하지 않았습니다.

  2. ==============================

    2.또한 제시의 대답에, 나는 당신이 일반적으로 DB에 새 열을 추가 피할 수 있음을 추가해야합니다 그냥 사용자 모델에서 사용자 정의 메소드를 생성하고 사용자의를 얻기 위해 쿠키를 사용합니다 시간대 :

    또한 제시의 대답에, 나는 당신이 일반적으로 DB에 새 열을 추가 피할 수 있음을 추가해야합니다 그냥 사용자 모델에서 사용자 정의 메소드를 생성하고 사용자의를 얻기 위해 쿠키를 사용합니다 시간대 :

    클라이언트 측에서 (JS)

    function set_time_zone_offset() {
        var current_time = new Date();
        $.cookie('time_zone', current_time.getTimezoneOffset());
    }
    

    응용 프로그램 컨트롤러에서 :

    before_filter :set_timezone 
    
    def set_timezone  
     min = request.cookies["time_zone"].to_i
     Time.zone = ActiveSupport::TimeZone[-min.minutes]
    end 
    
  3. ==============================

    3.

    function set_time_zone_offset() {
      var current_time = new Date();
      $.cookie('time_zone', current_time.getTimezoneOffset());
    }
    

    이 오프셋 시간이 일정하지 않기 때문에, 그것은 일광 절약 기간에 따라, 올바르지 않습니다. 레일은 ActiveSupport :: 시간대 [-min.minutes]를 호출 할 때 오프셋 표준 시간을 기대하고있다.

    예는 : 날짜 2013년 9월 3일 10시 50분 12초 +02에서 프랑스 : 오프셋으로 ActiveSupport 프랑스 시간대를 해결하기 위해 -60가 필요합니다 경우 00, 당신의 자바 스크립트 -120을 반환합니다.

    그럼 당신이 당신이 레일에 사용되는 바로 값을 얻기 위해 오프셋 1 시간을 빼줄 것 인 경우에,이 다음 JS에서 일광 절약 시간인지를 검사 할 필요가있다.

  4. from https://stackoverflow.com/questions/4269270/rails-3-setting-the-timezone-to-the-current-users-timezone by cc-by-sa and MIT license