ダメでしょ!

プログラミングとか怒られた話とか…

Rails のルーティングに使用する id を別の内容に変更する方法

通常、edit 等に使用する URI に設定される id を、別のキー等で置き換えたい場合があります。

$ be rake routes
             Prefix Verb   URI Pattern                                        password_resets POST   /password_resets(.:format)              password_resets#create
 new_password_reset GET    /password_resets/new(.:format)          password_resets#new
edit_password_reset GET    /password_resets/:id/edit(.:format)     password_resets#edit
     password_reset PATCH  /password_resets/:id(.:format)          password_resets#update
                    PUT    /password_resets/:id(.:format)          password_resets#update

この id を code に置き換えたい場合、.\config\routes.rbに以下のようにparam: codeを設定することで、置き換えることができます。

  resources :password_resets, param: :employee_code, only: [:new, :create, :edit, :update]

上記のようにすることで、ルーティング情報は以下のようになります。

$ be rake routes
             Prefix Verb   URI Pattern                                    Controller#Action        password_resets POST   /password_resets(.:format)                     password_resets#create
 new_password_reset GET    /password_resets/new(.:format)                 password_resets#new
edit_password_reset GET    /password_resets/:code/edit(.:format) password_resets#edit
     password_reset PATCH  /password_resets/:code(.:format)      password_resets#update
                    PUT    /password_resets/:code(.:format)      password_resets#update

id とは別のキーを主キーのような形で使う際に重宝します。