2011-08-17 1 views
3

지난 3 개월 동안 Ruby on Rails를 발견하고 매료되었습니다. 그러나 내가 할 수있는 최선의 방법이 무엇인지 모르겠다. 이제 저는 몇몇 변수의 초기화와 스택을했습니다. 모든 응용 프로그램은 ajax를 통해 실행되므로 모든 인스턴스 변수는 한 번만 초기화해야합니다.Rails 3에서 변수를 초기화하는 곳

나는 한 번만 실행되는 applicationController에서 '초기화'하는 메서드를 시도했지만 문제는 내가 아직 초기화되지 않은 요청 개체에 액세스하고 있다는 것입니다.

나는 application_controller에서 before_filter를 시도했지만, 비록 그것이 ajax 요청이라 할지라도 모든 요청을 수행한다.

누군가 요청 객체의 값으로 인스턴스 변수를 초기화하는 방법을 알고 있습니까? 예, 아마도 초보자 용 질문입니다. 내가 루비 1.8.7를 사용하고 사전에 3 감사 레일있어

+1

레일 서버를 시작할 때 변수를 한 번만 지정 하시겠습니까? 또는 모든 요청에 ​​대해? 정확히하려는 일을 게시 해 주시겠습니까? –

답변

8

페이지에 착륙 할 때 초기화 부분을 수행하고 같은 페이지의 모든 Ajax 요청을 건너 뛰면됩니다.

class ApplicationController < ActionController::Base 

    before_filter :load_vars 

    protected 

    def load_vars 
    unless request.xhr? #check if ajax call 
     # do all your initialization here 
    end 
    end 

end 
+2

덕분에 덱스터, 내 문제를 해결해 줘서 고마워. 가난한 설명에 대해 사과드립니다. 유일한 xhr 요청은 매개 변수가있는 방문 요청입니다. 따라서 이러한 매개 변수를 한 번만 초기화해야합니다. 위의 코드를 사용하면 초기화 프로세스가 한 번만 수행됩니다. 위대한 커뮤니티. 모두에게 감사드립니다. – kanedaki

1

필터링과 같이 전에를 사용하여이를 달성 할 수 있어야한다 :

ApplicationController < ActionController::Base 

    before_filter :make_it_rain 


    protected 

    def make_it_rain 
    @rain = 'lots' 
    # You should have access to 'request' in here 
    # Try raise request.inspect for info 
    end 


end 

당신은 전에를 배치 할 수 있습니다 응용 프로그램의 한 부분에만 적용되거나 특정 작업을 위해 실행되는 경우 특정 컨트롤러에서 필터링하십시오.

1

당신이 말하는 변수가 요청 매개 변수에서 초기화되면 모든 요청에 ​​대해 초기화해야합니다. 따라서 올바른 작업을 수행 할 수있는 위치는 필터 이전이어야합니다.

나는 application_controller에서 before_filter를 시도했지만, 비록 그것이 ajax 요청이라 할지라도 내가하는 모든 요청을 실행합니다.

아약스 요청은 서버 측에서 본 정상적인 요청이므로 "평등하게"이해할 수 없습니다. 확인중인 값이 요청 매개 변수에서 온 것이므로 모든 컨트롤러/액션에이 값이 필요하면 ApplicationController에서 초기화를 수행해야합니다. 그렇지 않으면 일부 컨트롤러에서만 (또는 일부 작업에만 해당)이 필터를 호출 할 수 있습니다. 구문

# to execute it only for some actions 
before_filter :your_initialization_method, :only => [:action1, :action2] 
# or to exclude some actions 
before_filter :your_initialization_method, :except => [:action1, :action2] 

서로 다른 컨트롤러가 ApplicationController에서 정의 만 해당 컨트롤러에 before_filter 호출을 통해 그 방법을 공유해야합니다.

+0

예, 아약스 요청이 어떻게 작동하는지 이해하지 못했던 것 같습니다. answwer Fabio에 감사드립니다. – kanedaki