📝
member VS collection
memberとcollectionの違い
結論として member と collection の違いはルーティングに id がつくかどうかです。
memberを使用した場合:id
が付与される
collectionを使用した場合id
が付与されない
ここでは例としてUserControllerのconfirm
というメソッドを実行するルーティングを設定します。
memberの場合
resources :users do
member do
get 'confirm'
end
end
上記のようにmemberをしようとすると以下のようにルーティングが設定されます。
/users/:id/confirm
このように member の場合は :id が付与されます。
この :id は controller 内で params[:id] という形で受け取ることができますね。
collectionの場合
resources :users do
collection do
get 'confirm'
end
end
collection を使用すると以下のようなルーティングが設定されます。
/users/confirm
member と違って collection は :id が存在していません。
一見似ている2つには、このような違いがあるわけですね。
collection と member のアクションが1つだけの場合は、
以下のようにルーティングで :on というオプションを使うことでシンプルに記述することも可能です。
resources :users do
get 'confirm', on: :member
end
resources :users do
get `confirm', on: :collection
end
Discussion