What have you found for these years?

2008-12-06

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

All texts are licensed under CC Attribution 3.0