【Rails】自分で設定したアクションをルーティングに追加するmemberとcollection

基本的にルーティングを追加する時には、リソースベースのルーティングを使えば「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 を使用する
タイトルとURLをコピーしました