no more template is missing
日前貼在 ptt ruby 板的。merb 沒有這個問題咧,一律吐 406 not acceptable
作者 godfat (godfat 真常) 看板 Ruby
標題 Re: [問題] 關於 Rails 的 route
時間 Thu Nov 27 14:10:32 2008
───────────────────────────────────────
回一下文好了... 比較有誠意,順便賺 p 幣 XD
我有點不太記得了,但是印象中 rails 在有 respond_to 和沒有的情況下,
處理效果不太一樣。好像是有 respond_to 就會吐 406 + blank page,
而沒有的話卻會顯示 500 (MissingTemplate)
我對這點非常不滿,覺得一致性低到很誇張的境界。
於是在 application controller 裡加上:
rescue_responses.merge! 'ActionView::MissingTemplate' => :not_acceptable
讓 MissingTemplate 可以吐出 406, 而不是 500.
不然連接 http://hostname/controller/action/id.asdasd
後面那 . 什麼的亂打,都會吐出 500, 但我認為這只是網址錯誤而已。
而既然 respond_to 是會吐出 406, 那為什麼 missing template 不是 406?
另一方面,406 + blank page 也很好笑,為什麼 public/404.html 和
public/500.html 有效,而 public/406.html 又無效?
所以我也在 ActionController::MimeResponds::Responder 的 respond 底下,
加上這一段:
if @order.include?(Mime::ALL)
@responses[Mime::ALL].call
else
# BEGIN patch by godfat
# @controller.send :head, :not_acceptable
@controller.send :render_optional_error_file, :not_acceptable
# END patch by godfat
end
把 head 的空白頁改成輸出 public/406.html 的內容。
不過這是 2.1 時的事,其他版本是怎麼樣我就沒有追蹤了...
同理可證,如果 RouteError 不會顯示 404 的話,
可能就在 application controller 裡加上:
rescue_responses.merge! '????::RouteError' => :not_found
之類的吧?
[略]
--
「行け!Loki!」(rocky ロッキー)
-Gurumin ぐるみん 王子? XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.121.85
0 retries:
Post a Comment
Note: Only a member of this blog may post a comment.