2011-08-16 10 views
0

私のウェブサイトにはたくさんのコースがあります。私は「コースに行く」フォームを持っています。ユーザーが有効なコース名を入力すると、そのユーザーをそのコースページに正常にリダイレクトします。レール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

なぜあなたのルートをそのように構築していますか?なぜルートを使用しないのですか?あなたは「フレームワークに逆らって」いるようです。 – corroded

+0

各コースのページは単なる静的なページです。元々は5のようなコースはほとんどありませんでしたが、今はたくさんあります。私はちょうど新しいコントローラを実装すると思う – Wasi

答えて

2

、Railsの規則を使用してのconfig/routes.rbをに置く:これは/ルート/コースを作成し

resources :courses 

:IDをあなたのための。あなたはモデル、コントローラおよびroutes.rbをが含まれている場合それが役立つだろう

def show 
     @title = "Courses" 
    end 

あなたのルートが有効であるかどうかを確認するためにこれを使用することができます
+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

関連する問題