結論
routes.rbでasオプションを使う。
get '/users/mypage', to: "users#show", as: :user_mypage #RESTではないがdevise_auth_tokenを用いる設計でidを使用せずuidを使用する関係でパスを独自に設定
こんな感じでasオプションを使うと
api_v1_user_mypage GET /api/v1/users/mypage(.:format) api/v1/users#show
のようにprefixが設定される。
今回のケースだとasオプションがない場合
api_v1_users_mypage GET /api/v1/users/mypage(.:format) api/v1/users#show
のようにパスが設定されてしまっていた。
※user_mypageがusers_mypageになってしまい、RESTな設計をした際のshowアクションのprefixと合わない。通常showアクションはURLは複数形、prefixは単数形になる。
どんないいことがあるの?
RESTじゃない設計を意図的にしたい場合などに使える。
もちろんRESTな設計にするに越したことはないけど。
今回React × Rails SPAを作成するにあたり、uidというdevise_auth_token専用の識別子を使っている。
理由はidだとただの数字なのでセキュリティ的に問題がありそう、という懸念から。
RESTな設計をする場合マイページのURLはuser/:idのようになるはずだけどこのidをフロントエンドで扱うのが
ちょっとめんどくさかった。そして当然ながらuidをURLに含めるのは難しいので、
どうしてもusers/mypageみたいなパスにせざるを得なかった。
なので独自にルーティングを組んだんだけど、prefixがわがままでshowアクションなのにusers_mypage_pathと複数形になったので変えたくなった。
そもそもRESTな設計にしていればこんなことにはならなかったはず…なんですが
いざというときにはこういうこともできるので知っといてよかったと思う。