2017-02-22 89 views
1

呈現rescue_from中的異常警報我正在搶救未經授權的異常,並且希望在此救援塊中呈現警報。由於這是在我的應用程序控制器中,這種救援可能會以多種格式命中,所以我需要一個respond_to塊。使用respond_to

如果我這樣做沒有respond_to,一切工作正常。狀態設置爲401,我看到正確的異常消息閃爍。

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

但是,如果我在repond_to塊內做同樣的事情,沒有任何工作。狀態不會被設置,並且異常消息不會被渲染。

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

這裏有什麼問題?我已經瀏覽了大量的例子,這似乎應該起作用,但狀態和消息似乎被忽略。

+0

在第一個變體中,儘管它們的格式是什麼,但是您可以響應所有對控制器操作的請求。第二個變體定義僅針對json格式請求的響應,例如, '/示例/ new.json'。如果你像這個'/ example/new'那樣向你的動作發出請求,它將回退到你沒有定義任何狀態和消息的html格式。看到這個問題和答案的更多細節:http://stackoverflow.com/questions/9492362/rails-how-does-the-respond-to-block-work –

回答

0

除此之外,您還正在呈現一個JSON與

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

你所回答到HTML請求......所以,如果你需要使它在瀏覽器中,你需要處理所有格式化自己......

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

我的意思是...你問的方式,我猜你只有在你的瀏覽器上測試它時纔會遇到問題......如果沒有在最後以'.json'格式擊中端點......就像'/ controller/action.json' – cefigueiredo