📝

member VS collection

2024/01/07に公開

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