0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RailsでPrefixをカスタマイズする

Last updated at Posted at 2021-04-05

結論

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な設計にしていればこんなことにはならなかったはず…なんですが
いざというときにはこういうこともできるので知っといてよかったと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?