是否有將用戶重定向到特定控制器的解決方案#如果沒有路由匹配,是否有action?我有這樣一個「最後的規則」:如果沒有路由匹配,則Rails路由
match ":rest" => "application#notfound", :constraints => { :rest => /.*/ }
將所有「其他」的東西重定向到應用程序#notfound。問題是插件與自己的路線設置低於 shis規則,永遠不會被調用。
是否有將用戶重定向到特定控制器的解決方案#如果沒有路由匹配,是否有action?我有這樣一個「最後的規則」:如果沒有路由匹配,則Rails路由
match ":rest" => "application#notfound", :constraints => { :rest => /.*/ }
將所有「其他」的東西重定向到應用程序#notfound。問題是插件與自己的路線設置低於 shis規則,永遠不會被調用。
你絕對不是唯一有此問題的人。我知道這很令人沮喪,但給它一些時間 - 我相信Rails團隊會把簡單而優雅的東西放在一起。我處於類似的位置,只有我需要知道用戶輸入的URL資源不正確。
快速谷歌搜索,我發現這篇文章演示full solution to the Rails 3.0 rescue_from ActionController::RoutingError problem。該解決方案涉及Route Globbing,並解決了我需要處理不正確的URL和捕獲輸入的URL。希望這可以幫助!
也許它不是最好的方法,但它會在你的作品沒有找到更好的解決辦法
鋼軌2.3,在應用程序控制器,趕上像
rescue_from(ActionController::RoutingError) { redirect_to "/xpto" #add your code here }
Rails的例外3
在初始化把這樣的代碼:
module ActionDispatch
class ShowExceptions
def render_exception(env, exception)
if exception.kind_of? ActionController::RoutingError
render(500, 'it was routing error')
else
render(500, "some other error")
end
end
end
末
或更多的東西乾淨,如:
或:
match '/:anything', :to => "home#routing_error", :constraints => { :anything => /.*/ }
但也許這最後一場比賽不會對您好,因爲它將覆蓋來自插件/引擎的所有路線。我認爲最好的解決方案是使用定製機架中間件來處理特殊情況。
製作一條全路徑並將其作爲您的routes.rb文件中的最後一條規則。
match "*rest" => "application#notfound"
您還可以在控制器中獲取路徑作爲參數到params[:rest]
的任何參數。
爲什麼選擇投票? – edgerunner 2011-02-02 12:29:38
爲什麼不簡單地編輯public/404.html? – Faisal 2010-11-11 15:04:25