Re: [問題] 關於 Rails 的 route
回一下文好了... 比較有誠意,順便賺 p 幣 XD
※ 引述《shelary (喵小咩)》之銘言:
: 環境:
: Rails 2.0.2
: 狀況:
: rails 的網址結構是 http://domain/controller/action/id
: 當我的 controller 是不存在時..會出現 Route Error 的錯誤
: 當我的 action 是不存在時..會出現 Unknown action 的錯誤
: 請問要如何攔截這2個錯誤?
我有點不太記得了,但是印象中 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
之類的吧?
: 因為使用者在操作時..如果出現這兩個錯誤..根本看不懂
: 我希望可以轉到某一個頁面去..在這個頁面用中文來對使用者說明
: 也就是類似 Apache 裡 httpd.conf 可以設定
: ErrorDocument 404 /missing.html
: 把 404 的錯誤都導到 missing.html 這頁來
照理說 rails 的 404 都會顯示 public/404.html 才對
可以的話,就改那頁的內容即可。要動態的頁面的話,
當然也可以,只是我忘記了,要查查看
--
「行け!Loki!」(rocky ロッキー)
-Gurumin ぐるみん 王子? XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.121.85
→
11/27 15:37, , 1F
11/27 15:37, 1F
→
11/27 15:38, , 2F
11/27 15:38, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章
6
17