2011-08-16 37 views
0

我在我的網站上有很多課程。我有一個「去課程」的形式。當用戶輸入有效的課程名稱時,我成功將該用戶重定向到該課程頁面。Rails 3:檢查軌道代碼中的路由錯誤

def courses 
    @title = "Courses" 
    @path = "#{root_path}"+"course/" + "#{params[:course]}" 
    if @path == "/course/" 
     @title = "Courses" 
     render 'courses' 
    else 
     redirect_to @path 
    end 
end 

這適用於所有有效的輸入,如果路線存在。當用戶輸入無效路線名稱時,我想要處理錯誤情況。我想檢查代碼中的路由錯誤,並讓用戶知道錯誤消息。 ?這是可能的」

+2

爲什麼不在數據庫中查詢重定向之前是否有效? –

+0

爲什麼ou建立你的路線?爲什麼不使用路線呢?看起來你是「違背框架」。 – corroded

+0

每個課程頁面只是一個靜態頁面。我以這種方式實現它,因爲最初我有很少的課程,如5,但現在我有很多。我想我會實現一個新的控制器 – Wasi

回答

2

而是在你的控制器建立了定製的路線,使用Rails約定,並放置在配置/ routes.rb中:

resources :courses 

這將創建路由/課程/:ID爲您然後您的控制器將簡化爲:

def show 
     @title = "Courses" 
    end 

這將幫助,如果你提供你的模型,控制器和routes.rb中

+0

我沒有模型或任何東西..該課程只是靜態頁面,我手動分配給他們的路線在config/routes.rb – Wasi

+0

我推薦使用Rails基於或選擇另一個框架的MVC體系結構。 – airlok

1

您可以用它來檢查,如果您的路由有效:

def check_route(route) 

    @route_valid = true 
    begin 
     ActionController::Routing::Routes.recognize_path(@route, :method => :get) 
    rescue 
     # error means that your route is not valid, so do something to remember that here 
     @route_valid = false 
    end 
end 

但總的來說,我不喜歡你根據課程創建路線的想法。爲什麼不使用簡單的查找器?

+0

是的,你是對的,我仍然在學習鐵軌。習慣它。我不再遵循這個邏輯。我創建了一個課程數據庫,並在重定向用戶之前查詢數據庫 – Wasi