2017-02-22 9 views
1

권한이없는 예외를 찾아 내고이 구조 블록 내에서 경고를 렌더링하려고합니다. 이 응용 프로그램 컨트롤러에 있기 때문에,이 구조는 여러 형식으로 공격받을 수 있으므로 respond_to 블록이 필요합니다.respond_to를 사용하여 rescue_from에서 예외 경고 렌더링

respond_to없이이 작업을 수행하면 모든 것이 정상적으로 작동합니다. 상태가 401로 설정되어 있고 적절한 예외 메시지가 깜박입니다.

render :json => exception.message, :status => 401 

그러나 동일한 작업을 repond_to 블록 내에서 수행하면 아무 효과가 없습니다. 상태가 설정되지 않고 예외 메시지가 렌더링되지 않습니다.

respond_to do |format| 
    format.json { render :json => exception.message, :status => 401 } 
end 

여기에는 어떤 문제가있을 수 있습니까? 나는 많은 예제를 살펴 봤는데, 이것이 효과가있는 것처럼 보이지만 상태와 메시지는 무시되는 것 같습니다. 당신이

render :json => exception.message, :status => 401 

당신은 HTML 요청에 응답하는와 JSON을 렌더링하는 ... 그래서 당신은 브라우저에 렌더링해야하는 경우, 당신은 모두가 자신의 형식을 처리 할 필요가 외에

+0

첫 번째 변형에서 형식이 무엇인지에도 불구하고 컨트롤러 작업에 대한 모든 요청에 ​​대한 응답을 렌더링합니다. 두 번째 변형은 json 형식 요청에 대해서만 응답을 정의합니다. '/ example/new.json'을 참조하십시오. 이'/ example/new'와 같은 액션을 요청하면 상태와 메시지를 정의하지 않은 HTML 형식으로 대체됩니다. 자세한 내용은이 질문과 답변을 참조하십시오. http://stackoverflow.com/questions/9492362/rails-how-does-the-respond-to-block-work –

답변

0

...

respond_to do |format| 
    format.json { ... } 
    format.html { ... } 
end 
+0

내 말은 ... 당신이 묻는대로 말입니다. 브라우저에서 테스트하는 데 문제가 있습니다 ... 끝 부분에'.json' 형식으로 끝점을 지정하지 않으면 .../controller/action.json'과 같습니다. – cefigueiredo