作者kojilin (怎麽有办法这麽大声)
看板Ruby
标题Re: [RoR ] 错误连结
时间Wed Dec 12 11:09:39 2007
※ 引述《ihower (好2ˇ)》之铭言:
: ※ 引述《janyfor (你哪位ㄚ)》之铭言:
: : 如果使用者打入了不正确的URL
: : 该怎麽告知无此页面
: : 在每个地方加判断太麻烦了QQ
: : 例如: http://localhost:3000/new
: : ↑没有 new 这个 controller
: : http://localhost:3000/news/no
: : ↑没有 no 这个 action
: : http://localhost:3000/news/show/66
: : ↑没有 66 这个 id
: : 该怎麽办呢?
: 你这里有两种情况:
: 1. 没有这个 route (i.e. 没有这个controller或action)
: 请在 routes.rb 最下面加入如
: map.connect '*anything', :controller => 'lobby', :action => 'page_not_found'
: 这样就会自动导去你自订的controler跟action
: 2. 找不到id, 这时其实Rails是丢 RecordNotFound exception
: 请装 exception_notification 这个官方 plugin,
: 他会帮你补捉所有 exception (only in production mode)
: 如想自订 render 页面, 在 controller/application.rb 里写过
: render_404 跟 render_500 就可以了
: 例如我这样写
: def render_404
: respond_to do |type|
: type.html { render :template => 'common/404', :status => "404 Not Found" }
: type.all { render :nothing => true, :status => "404 Not Found" }
: end
: end
也可以用
rescue_action_in_public
看看
像是
def rescue_action_in_public(exception)
case exception
when ActiveRecord::RecordNotFound then
render :file => "#{RAILS_ROOT}/public/500.html"
when NoMethodError
render :file => "#{RAILS_ROOT}/public/500.html"
else
render :file => "#{RAILS_ROOT}/public/500.html"
end
end
这个如何?
在2.0.1可以写成
rescue_from(ActiveRecord::RecordNotFound) \\
{ |e| render :file => "#{RAILS_ROOT}/public/500.html" }
只是看消息好像ActionController::RoutingError在2是丢404所以无法处理,
http://dev.rubyonrails.org/ticket/10328
koji
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.138.150.67
※ 编辑: kojilin 来自: 140.138.150.67 (12/12 11:10)
1F:推 janyfor:多谢 12/14 19:52
2F:→ kojilin:不会,忘记写了,如果在development环境的话还要设定勒 12/15 14:56
3F:推 janyfor:不好意思 请问可以说一下要设定哪些吗? 12/17 02:55