基本的にルーティングを追加する時には、リソースベースのルーティングを使えば「index」「show」「new」「edit」「create」「update」「destroy」の7つのアクションへのルーティング自動で設定してくれます。
Rails.application.routes.draw do
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
resources :todo_lists
end
しかし、上の7つのアクション以外の他にアクションを追加するにはどうしたらいいのでしょうか。
自分でアクションを追加するmember と collection
resourcesでroutingを設定しているとき、resourcesでは自動で生成されないactionへのroutingを設定するときに使用するのがmember と collectionです。
member と collectionの違い
結論、生成するrootingにidがつくかつかないか、です。
どういうことか解説していきます。
member の場合
resources :todo_lists do
member do
get 'check'
end
end
上記のように member
を使用すると以下のようにルーティングが設定されます。
/todo_lists/:id/check
このように member
の場合は :id
が付与されます。
この :id
は controller 内で params[:id]
という形で受け取ることができますね。
collection の場合
resources :todo_lists do
collection do
get 'check'
end
end
を使用すると以下のようなルーティングが設定されます。
collection
/todo_lists/check
member
と違って collection
は :id
が存在していません。
一見似ている2つには、このような違いがあるわけですね。
まとめ
:id
を使用した特定のデータに対するアクションの場合はmember
を使用する:id
の必要ない全体のデータに対するアクションの場合はcollection
を使用する