2017-01-04 5 views
0

をリダイレクト:カスタムルートは、私は私のroutesファイルに次のように持っている間違った行動に

resources :exercises, shallow: true do 
    resources :questions do 
     resources :test_cases do 
     member do 
      post :run, to: 'test_cases#run' 
     end 
     end 
    end 
    end 

    get 'test_cases/test', to: 'test_cases#test' 

私の問題は、リソースの外に、testルートです。私はそれがどうあるべきか全くtest_cases#test、私はtest_cases#showにリダイレクトしていビューからtest_cases_test_urlを呼び出していない場合は、しかし、

test_cases_test GET /test_cases/test(.:format)      test_cases#test 

:私は私が望むものを持っている利用可能なルートを確認します。 This questionは別の状況ではほぼ同じ問題です。私はget 'test', to: 'test_cases#test'を私のresources :test_casesの中に入れてmemberのブロックの中に入れたら、私のルートにquestion_idがあり、memberはtest_case_idをブロックするので、受け入れられた答えに従いたくありません。私はこれらのIDは必要ありません。

希望のルート(test_cases/test)が機能するようにするオプションはありますか?

答えて

1

私はあなたがtest_cases/test URLと同じパターンを持っていて、前に来るので、あなたはtest_cases#showメソッドにマッチしていると思います。ちょうど私が

resources :exercises, shallow: true do 
    resources :questions do 
    resources :test_cases do 
     member do 
     post :run 
     get :test 
     end 
    end 
    end 
end 
+0

優秀、@Swards推奨のだもう一つの方法は、

get 'test_cases/test', to: 'test_cases#test' resources :exercises, shallow: true do resources :questions do resources :test_cases do member do post :run, to: 'test_cases#run' end end end end 

を提出あなたのルートの一番上にtest_cases/test GETルートを移動します。出来た!これらは 'test_cases_test GET/test_cases/test(。:書式)'と 'test_case GET/test_cases /:id(。:書式)'の 'test'と' show'ルートです。理解しているに過ぎない(愚かな質問のように見えるかもしれませんが、このルートの問題は時々私を混乱させます):これらのルートを見て、同じパターンを持っていると言うと、exacltly " – rwehresmann

+1

コンソールで 'rake routes'を実行すると、一致するパターンを見ることができます。 test_caseパスの場合、:idはパラメータであり、何でもかまいません。ですから、この場合 "GET/test_case/"は 'test_cases#show'になり、" GET/test_case/test "は' test_case#test'に行きます。ルートファイルでは、より制限の厳しいルートが最初になければなりません。ルートは2つの主な目的、つまりURL文字列の生成とurlリクエストのコントローラ#アクションへの一致に使用されます。ルートファイルの順に一致します。それは、あなたをつかまえていた一致する部分です、生成URLは期待どおりに働いていました。 – Swards

+0

@rwehresmann - 答えに別のオプションを追加しました。おそらくあなたの状況に適しています – Swards

関連する問題