作者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