Railsルーターの目的
そもそもルーティングは何をしてるんや。という話。
Railsのルーターは受け取ったURLを認識し、適切なコントローラ内アクションやRackアプリケーションに割り当てます。ルーターは、ビューでこれらのパスやURLを直接ハードコードすることを避けるためにパスやURLを生成することもできます。
つまり受け取ったURLを捌いて指示を出す、司令塔ですよってこと。
resources と resource の違い
①URLにidを必要とするかしないのか
②resourceの場合単数なので、一覧みたいな概念はなく、indexが作られない
resources 複数
リソースをいくつも定義しなければならない場合は、以下のように簡単にわかりやすくできる。get,new,create,edit,update,destroy,showがresourcesでまとめられる!(only、exceptで限定することも可能)
resources :photos, :books, :videos
上の記法は以下と完全に同一です。
resources :photos
resources :books
resources :videos
ポイントとしては、リソース名がbooks、photosのような複数形になっていることにも注意
リソースが複数なのでidを持たないと識別できない
resource 単数
ユーザーがページを表示する際にidを一切参照しないリソースが使われることがあります。たとえば、/profileでは常に「現在ログインしているユーザー自身」のプロファイルを表示し、他のユーザーidを参照する必要がないとします。このような場合には、単数形リソース (singular resource) を使ってshowアクションに (/profile/:idではなく) /profileを割り当てることができます。
get 'profile', to: 'users#show'
結局どういうこと?
①URLにidを必要とするかしないのか
下記のようにresourcesが複数だとidが必要
resourceが単数だとidは要らない。
/mobile/posts/:id(.:format) ←postは何個も存在するためidが必要
/mobile/profile/edit(.:format) ←profileは一つしか存在しないため、idがいらない
②resourceの場合単数なので、一覧みたいな概念はなく、indexが作られない
resource :users
生成されるルーティング
new_users GET /users/new(.:format) users#new
edit_users GET /users/edit(.:format) users#edit
users GET /users(.:format) users#show
PATCH /users(.:format) users#update
PUT /users(.:format) users#update
DELETE /users(.:format) users#destroy
POST /users(.:format) users#create
参考文献