Railsでバックエンドの設計をしていて、resoucesではうまく表現できないルーティングがありそれが解決できたので共有
設定画面があり、そこでは一覧表示、更新ができるようにするというものであった。 設定は下記のような感じでユーザーに対しては1対1のテーブルとなってます。
name | type |
---|---|
id | int |
user_id | int |
setting1 | boolean |
setting2 | boolean |
一覧と更新であればRailsのresoucesを使えばいいじゃないか!と思ったのですがそうすると
:settings, only: %i[index update] resources
メソッド | パス | アクション |
---|---|---|
GET | /settings | settings#index |
PATCH/PUT | /settings/:id | settings#update |
このように、patchの方がパスパラメータにIDを欲してくるんですね。 でも特にパスパラメータで渡すものがないので
:settings, only: %i[index]
resources to: 'settings#update' patch setting_update,
このような選択肢も考えたのですが…いけてないですね。
そこで単一リソースについてルーティングできないのかなと調べていたらあるじゃないですか!! その名もresouce
この子を使うとさっきの問題が解決します。
:settings, only: %i[show update] resource
メソッド | パス | アクション |
---|---|---|
GET | /settings | settings#show |
PATCH/PUT | /settings | settings#update |
resourceはindexはないですが、他のアクションは全て持っているので汎用性も高いかなと思います!
参考文献 2.5 単数形リソース Rails のルーティング - Railsガイド