2021.10.08 に更新3 min read

Rails ルーティングの member と collection の違いを解説

サムネイル画像

Ruby on Rails ではルーティング設定をする場合に resources を使用することが多いと思います。
それに合わせてよく使う書き方で membercollection というものがあり、その2つの違いを分かりやすく解説していきます。

結論

結論として membercollection の違いはルーティングに id がつくかどうかです。

  • member を使った場合は id が付与される
  • collection を使った場合は id が付与されない

具体例と合わせて詳しく見ていきましょう。

解説

ここでは例として UsersController があり、それに hoge というメソッドを実行するルーティングを設定するとします。

users#hoge

member の場合

resources :users do
  member do
    get 'hoge'
  end
end

上記のように member を使用すると以下のようにルーティングが設定されます。

/users/:id/hoge

このように member の場合は :id が付与されます。
この :id は controller 内で params[:id] という形で受け取ることができますね。

collection の場合

resources :users do
  collection do
    get 'hoge'
  end
end

collection を使用すると以下のようなルーティングが設定されます。

/users/hoge

member と違って collection:id が存在していません。
一見似ている2つには、このような違いがあるわけですね。

collectionmember のアクションが1つだけの場合は、以下のようにルーティングで :on というオプションを使うことでシンプルに記述することも可能です。

resources :users do
  get 'hoge', on: :member
end
resources :users do
  get 'hoge', on: :collection
end

使い分け

まとめとして membercollection は以下のようなケースで使い分けることができます。

  • :id を使用した特定のデータに対するアクションの場合は member を使用する
  • :id の必要ない全体のデータに対するアクションの場合は collection を使用する

更に詳しく確認したいかたは Rails ガイドを参考にしてください。


SHARE