作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] 关於 Rails 的 route
时间Thu Nov 27 14:10:32 2008
回一下文好了... 比较有诚意,顺便赚 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
1F:→ shelary:404.html就没办法加一些动态文字..只能纯静态 11/27 15:37
2F:→ shelary:刚发现..要在 production 模式下才会读 404 11/27 15:38