2016-11-21 7 views
0

私のアプリケーション内の/felinesのルートを/catsに変更しようとしていますが、できる限り私のアプリケーションコードを少し変更しています(つまり、コントローラ、またはURLヘルパーへの参照)。ルートリネームとリダイレクトが間違ったURLヘルパーを生成する

routes.rbで私は

get '/felines', to: redirect('/cats') 
resources :cats, as: 'felines' 
  • をしています/catsFelinesController#indexを提供しています -
  • 良いと/cats/felinesをリダイレクト -

も良いしかし、デバッグ時に、私は

ことがわかりました
  • new_feline_path/cats/newある - BAD - 良い
  • felines_path/felinesです!

Iはまた、所望のように、私はroutes.rb内の2つの行の順序を切り替えた場合felines_pathは、/catsとなるであろうことを見出しました。

なぜこれらの行の順序がfelines_pathの値に影響しますか?

私は再ルーティングとリダイレクトを達成するための良い方法はありますか?

答えて

1
get '/felines', to: redirect('/cats') 

レールは上記ルートのfelines_path経路ヘルパーを生成し、優先順位が上から下にあるので、felines_pathは/ネコを指します。注文を変更すると、それが/catsを指す理由です。

それはあなたのfelinesパス

get '/felines', to: redirect('/cats'), as: 'felines_redirect' #or someother name like that 
+0

恐ろしいを上書きしないように、カスタムルートの別の名前を割り当てます!いくつかのフォローアップの質問:1.なぜnew_feline_pathもトップダウン優先度の対象にならなかったのですか? 2. 'felines_redirect'の値は、既存のルートと違って、まったく重要ですか? – tuff

+1

本当に 'new_feline_path'を上書きするものはありません。それは 'resources:cats、by:felines 'によって生成されます。 'felines_redirect'の値はあなたのビューのどこかでヘルパーを使う予定がない限り重要ではありません。レールをデフォルトにしないために追加しています。 – usha

関連する問題