2012-03-28 3 views
7

에 아약스 호출에 응답합니다. 로그 파일은 다음을 나타냅니다.는 어떻게이 같은 before_filter 쓰기 before_filter

Rendered js_helpers/_popover.js.erb (0.1ms) 
Filter chain halted as :authenticate_user rendered or redirected 

js 코드의 기능은 플래시 메시지를 보여주는 팝업 블록을 표시하는 것입니다. 하지만 js 코드가 전혀 흥분하지 않는 것처럼 보입니다.

def authenticate_user 
    if request.xhr? 
    flash.now[:alert] = 'Error' 
    render :js => "window.location = '/users/sign_up'" 
    else 
    authenticate_user! 
    end 
end 

는 대신, 가입 페이지로 리디렉션하려면 :

그래서, 난 내 방식을 변경했습니다.

그러나 여전히 문제가 있습니다.

요청이 아약스 호출은, 자바 스크립트 코드를 올 실행하거나 새 페이지 redirect_to : 플래시는

내 목표를 달성 할 수있는 방법

이 작동하지 않을 것 같다. 두 조건 모두에서 플래시에 메시지를 저장해야합니다.

자바 스크립트 코드가 너무 길어서 파일에 넣어야합니다. render : js를 사용하여 파일 내에서 javascript를 실행하려면 어떻게해야합니까?

답변

1

나는 클라이언트가 실행할 자바 스크립트 코드를 렌더링하는 대신 클라이언트가 이해할 수있는 json 응답을 리턴해야한다고 생각한다.

def authenticate_user 
    if request.xhr? 
    render :json => { alert: 'Error', redirect: sign_up_path }, :status => 403 
    else 
    authenticate_user! 
    end 
end 

ajax 호출에서 403 상태 코드를 트랩하고 경고 메시지를 표시 한 다음 지정된 URL로 리디렉션합니다. 403 (또는 가장 적합한 것으로 보이는 상태 코드)에 대한 표준 후크를 만들어 before_filter처럼 DRY가 될 수 있도록해야합니다.

0

난 리디렉션을 사용하여 레일을 사용하는 것이 당신이 찾고있는 것이라고 생각합니다.

def authenticate_user 
    if request.xhr? 
    flash[:alert] = 'Error' 
    redirect_to user_sign_up 
    else 
    authenticate_user! 
    end 
end 

이 리디렉션 및 플래시 메시지

을 작성해야 다음은 표준 레일은 AJAX 호출이 작동하지 않습니다 리디렉션 rails guides

+0

의 예입니다. – sockmonk

관련 문제