Ruby on Rails ではルーティング設定をする場合に resources
を使用することが多いと思います。
それに合わせてよく使う書き方で member
と collection
というものがあり、その2つの違いを分かりやすく解説していきます。
結論として member
と collection
の違いはルーティングに id
がつくかどうかです。
member
を使った場合は id
が付与されるcollection
を使った場合は id
が付与されない具体例と合わせて詳しく見ていきましょう。
ここでは例として UsersController
があり、それに hoge
というメソッドを実行するルーティングを設定するとします。
users#hoge
resources :users do
member do
get 'hoge'
end
end
上記のように member
を使用すると以下のようにルーティングが設定されます。
/users/:id/hoge
このように member
の場合は :id
が付与されます。
この :id
は controller 内で params[:id]
という形で受け取ることができますね。
resources :users do
collection do
get 'hoge'
end
end
collection
を使用すると以下のようなルーティングが設定されます。
/users/hoge
member
と違って collection
は :id
が存在していません。
一見似ている2つには、このような違いがあるわけですね。
resources :users do
get 'hoge', on: :member
end
resources :users do
get 'hoge', on: :collection
end
まとめとして member
と collection
は以下のようなケースで使い分けることができます。
:id
を使用した特定のデータに対するアクションの場合は member
を使用する:id
の必要ない全体のデータに対するアクションの場合は collection
を使用する更に詳しく確認したいかたは Rails ガイドを参考にしてください。