看板 Ruby 關於我們 聯絡資訊
回一下文好了... 比較有誠意,順便賺 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
shelary:404.html就沒辦法加一些動態文字..只能純靜態 11/27 15:37
shelary:剛發現..要在 production 模式下才會讀 404 11/27 15:38