我正試圖使用裸露的骨骼軌道控制器,並在同一時間有更細粒度的控制。如果我在:新行動,我回應我的新@實例,我得到一個狀態代碼200並呈現:新模板。在展會上,同樣的事情,不同的模板。到現在爲止還挺好。但是,在創作上,我遇到了意想不到的事情。如果新記錄成功並且我打電話給respond_with,我將被重定向到顯示(狀態碼302),這是正確的。但是,如果由於記錄無效而無法創建新記錄,則默認的respond_with通過發佈狀態碼200並呈現新模板來響應。模板是正確的,狀態碼不是。答案代碼是否應該在這種情況下422(不可處理的實體)?Rails和respond_with:爲什麼狀態碼不正確?
回答
Rails返回200響應,因爲它成功呈現'新'模板。對於非AJAX請求,這通常工作正常,因爲您還會在這種情況下向用戶顯示驗證錯誤,以便他們知道發生了什麼。
您應該需要422響應的唯一原因是,如果信息是通過AJAX提交的,並且您的客戶端JavaScript取決於響應代碼以知道該怎麼做。就像Jim說的那樣,如果你需要的話,你可以使用:status選項強制響應代碼進行渲染。在默認的「簡單」情況下,雖然沒有涉及AJAX,但您可能不需要它。
更新:jQuery客戶端可能依賴於響應代碼,通過在.ajax函數中包含'錯誤'回調或通過.ajaxError。
我不同意。狀態代碼與響應是否被呈現無關。無論狀態碼如何,HTTP響應都有一個以某種格式編碼的主體。任何瀏覽器都會呈現帶有有效HTML正文的HTTP 404錯誤響應。狀態碼對於瀏覽器來說非常重要。另一方面,AJAX響應的行爲有所不同。你有沒有嘗試用Rails的4xx狀態代碼發出一個AJAX響應,使用,比方說,jQuery?我可以告訴你,這是行不通的。 jQuery不會從非200響應中評估身體。 – ChuckE
而且沒有成功的「新」模板渲染。 Rails構建響應,但不會呈現它。瀏覽器呈現它。 Rails構建了許多響應數據包,包括404和500標準響應,這些響應總是由瀏覽器呈現,否則在開發模式下不會看到美麗的回溯。 – ChuckE
Rails有一個名爲'render'的方法,當處理一個控制器動作時,它會被顯式或隱式地調用。在Rails命名法中將這個過程稱爲「渲染」是很正常的。在這個意義上,瀏覽器將「呈現呈現的響應」。也許是一個超載的術語,但沒有任何不正確的。 –
- 1. Respond_with模板和狀態碼
- 2. Rails respond_with json工作不正確
- 3. Rails respond_with什麼都沒有?
- 4. 爲什麼我的狀態不確定?
- 5. 爲什麼我的Redux狀態不正確?
- 6. Accurev - 爲什麼文件狀態不正確?
- 7. 不正確的HTTP狀態代碼
- 8. 爲什麼html_entity_decode()解碼「ó」不正確?
- 9. 爲什麼respond_with JSON不起作用?
- 10. 未找到子實體的正確HTTP狀態碼是什麼?
- 11. 什麼是305 HTTP狀態碼?如何正確使用它?
- 12. 什麼是在Rails中將狀態值建模爲關聯的正確方法?
- 13. 爲什麼這個動態編程代碼不正確?
- 14. Rails respond_with不...響應
- 15. Rails:「狀態」未正確插入params?
- 16. 不正確的狀態
- 17. 爲什麼wszName不正確?
- 18. 爲什麼UIGraphicsGetCurrentContext不正確?
- 19. 爲什麼不正確?
- 20. navigator.cpuClass爲什麼不正確?
- 21. 當REST資源不存在時,什麼是正確的HTTP狀態碼?
- 22. 爲什麼rails設計需要respond_with來支持多種格式?
- 23. 爲什麼我的狀態不正確地映射到Redux中的道具?
- 24. 如何正確發送406狀態碼?
- 25. 如何正確控制http狀態碼?
- 26. Rails 3.2 respond_with
- 27. Ruby on rails:respond_to和respond_with有什麼區別?
- 28. 爲什麼狀態欄顏色不變?
- 29. 爲什麼SCTP不需要TIME_WAIT狀態?
- 30. Rails:點擊兩個靜態頁面時,爲什麼我的網址不正確?
我從來沒有見過Rails會返回一個422.在這種情況下它似乎是合適的,但我不認爲Rails默認返回它。也許它會在JSON響應?你可以在你的'render'中加入'status::unprocessable_entity'來強制它。 –
如何在respond_with中設置狀態?這是我的問題。而且,從語義角度來看,渲染必須做什麼和響應數據包?似乎渲染將數據包捆綁在一起並將其交付給機架處理程序。爲什麼我無法在渲染範圍外設置響應內容?我發現這種限制。 – ChuckE