Invalid route name, already in use: 'xxxxxxxx' (ArgumentError) エラーが出るときの条件を調査する

routers.rbで同じパス名を指定して以下のエラーがでたとき、ルーティングの記載順番を変えたらエラーが消えたので、エラーが出る条件を調査した。

Invalid route name, already in use: 'xxxxxxxx'  (ArgumentError)
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: 

routes.rbに以下のルーティングを書いてる

post "sign_up", to: "session#sign_up_process" 
get "sign_up", to: "session#sign_up", as: "sign_up" 

エラーになります。

記載順を入れ替えると・・

エラーになりません。

get "sign_up", to: "session#sign_up", as: "sign_up" 
post "sign_up", to: "session#sign_up_process" 

get が上に記載されてれば、重複しても大丈夫とかあるのか???

asを記載するルーティングを get / post で入れ替える。

エラーになります。

get "sign_up", to: "session#sign_up" 
post "sign_up", to: "session#sign_up_process", as: "sign_up" 

記載順を入れ替えると・・

エラーになりません。

post "sign_up", to: "session#sign_up_process", as: "sign_up" 
get "sign_up", to: "session#sign_up" 

結論

  • ①パス名(名前なし)のルーティングの下に、①のパス名と同じ名前でasを指定するとエラーになる。
  • ①パス名(名前あり)の下に、①のas名と同じパス名を指定してもエラーにならない。

その他

どちらもasを外した場合、エラーになりません。

get "sign_up", to: "session#sign_up" 
post "sign_up", to: "session#sign_up_process"