2012-06-27 9 views
1

이것은 매우 간단한 질문 일지 모르지만 그 답을 찾을 수 없습니다. javascript/jQuery (백본보기에서)의 레일 세션 변수에 어떻게 액세스해야합니까? 대부분 이것이 최선의 방법은 아니지만 이것은 나에게 문제가되지 않습니다. 백본보기에서 레일 세션 변수에 액세스하기

는 알렉산드라

답변

3

gon gem을 사용할 수 있습니다. 그것은 각 요청과 함께 자동으로 데이터를 보내고 자바 스크립트에서 액세스 할 수 있습니다.

예를 들어, Gemfile에있는 보석을 포함한 후, 당신은 당신의와 ApplicationController에 필터 전에를 추가 할 수 있습니다

class ApplicationController < ActionController::Base 

    before_filter :set_gon 

    ... 


    protected 
    def set_gon 
     gon.my_session_variable = session[:my_session_variable] 
    end 
end 

를 응용 프로그램 레이아웃에서 단면 헤드를 당신의 HTML :

<%= include_gon %> 

이제이 값을 자바 스크립트에서 읽을 수 있습니다.

alert(gon.my_session_variable) 

이렇게하면 귀하의 아약스 응답에 요청에 대한 특정 데이터를 포함하고 모든 추가 정보는 gon 변수에서 사용할 수 있습니다.

2

아니, 세션 변수는 서버에있는 감사합니다, 그래서 자바 스크립트/jQuery로 세션 변수에 액세스 할 직접적인 방법은 없습니다.

:

가장 좋은 방법은 당신이 직접 자바 스크립트에 액세스 할 수 있도록 예를 JSON 형식에서 원하는 세션 변수를 반환하는 정의 URL로 서버에 자바 스크립트/jQuery로 Ajax 호출을 만드는 것입니다

{ 
    "sessionVariableName": "sessionVariableValue" 
} 

아니요, 이것은 분명히 모범 사례가 아닙니다. 세션 변수는 서버 IMO에 있어야합니다.

0

그냥 경우이

ejosafat의 대답은 유효하지만

, 나는 백본에서 레일 세션 변수에 액세스하는 데 필요한 주요 이유가 수정할 수 있도록했다 ... 누군가 도움이 될 수 있습니다. 내가 원하는 것을 확실히 알지 못하기 때문에, 나의 질문은 모호했다. (예를 들어, 세션 변수에 액세스하는 것이 직접적인 프로세스 일 필요는 없었다.)

  1. 하면의 값을 보내 sessions_controller.rb 파일

  2. 에 필요한 레일 세션 변수를 초기화해야합니다 : 내 목표를 달성 결국 방법은 다음과 같은 4 단계 프로세스를 사용하여이었다 백본으로 수정할 수있는 세션 변수 (필자의 경우 세션 변수는 사용한 레일 컨트롤러에서 액세스 한 다음 해당 레일보기로 보낸 다음 백본 ​​app.js 파일로 전송하여 액세스 가능하게 만들었습니다. 필요한 백본보기로)

  3. 백본에서 GET 요청을 기반으로 레일 세션 변수를 업데이트 할 수있는 레일 측 (사용 된 컨트롤러에서) 예를 들어

    def modify_session_variables 
        if params[:taskParentId] 
        session[:task_parent_id] = params[:taskParentId] 
        end 
    end 
    
  4. 세션 상태를 나타내는 골격 변수는 사용자에 의해 변경 될 때마다 레일 세션 변수에 대한 업데이트 된 값 (들)로 서버에 AJAX 요청을 전송.

    saveAsParentTask: function() { 
        var self = this; 
        $.ajax({ 
        url: '/modify_session_variables', 
        type: 'GET', 
        data: { 
         taskParentId: self.getId() 
        }, 
        async: false, 
        success: function() { 
         App.filtersState.setSubtreeParent(self); 
        } 
        }); 
    }, 
    

이 과정은 한 (들) 그가 로그 아웃하지 않는 한 사용자 선택을 저장합니다 : 예를 들어, 내 백본 모델 중 하나는 그것의 속성 중 하나가 수정 세션 변수를 업데이트합니다 응용 프로그램. 조금 복잡하지만 내가 원하는 방식대로 작동합니다.

관련 문제