普通にroutingを書いていくとデフォルトで以下のような感じになる。
※rails5でも動作確認を取りました。
例)スケジュール管理系のアプリを作ったと想定
config/routes.rb
Rails.application.routes.draw do
resources :schedules
end
$ ./bin/rake routes
Prefix Verb URI Pattern Controller#Action
schedules GET /schedules(.:format) schedules#index
POST /schedules(.:format) schedules#create
new_schedule GET /schedules/new(.:format) schedules#new
edit_schedule GET /schedules/:id/edit(.:format) schedules#edit
schedule GET /schedules/:id(.:format) schedules#show
PATCH /schedules/:id(.:format) schedules#update
PUT /schedules/:id(.:format) schedules#update
DELETE /schedules/:id(.:format) schedules#destroy
これの:idが自分の作成した意図と合わない、しっくりこない場合がある。
たとえば:idを:dateに変更した場合とか
リファレンスをググってもなかなか出てこないのでソースを見てみた。
actionpack-4.1.6/lib/action_dispatch/routing/mapper.rb
# [:param]
# Overrides the default resource identifier `:id` (name of the
# dynamic segment used to generate the routes).
# You can access that segment from your controller using
# <tt>params[<:param>]</tt>.
コメントにしっかり書いてあった。
どうやらググり方が悪かったようである。
コメント通りルーティングを書き換えてみる。
paramを追加する必要があるのでparam: :dateを追加
config/routes.rb
Rails.application.routes.draw do
resources :schedules, param: :date
end
$ ./bin/rake routes
Prefix Verb URI Pattern Controller#Action
schedules GET /schedules(.:format) schedules#index
POST /schedules(.:format) schedules#create
new_schedule GET /schedules/new(.:format) schedules#new
edit_schedule GET /schedules/:date/edit(.:format) schedules#edit
schedule GET /schedules/:date(.:format) schedules#show
PATCH /schedules/:date(.:format) schedules#update
PUT /schedules/:date(.:format) schedules#update
DELETE /schedules/:date(.:format) schedules#destroy
期待通りの結果となり、params[:date]で取得できるようになった。