##member
とcollection
が使われる理由
どちらもresourcesでroutingを設定しているとき、resourcesでは自動で生成されないactionへのroutingを設定
するときに使用するもの。
member
,collection
ルーティングを行うと、新たにルーティングした〇〇_photo_urlヘルパー
と〇〇_photo_pathヘルパー
も作成される。
##member
とcollection
の違いとは
生成するroutingに、:id
の有無で決まる。
:id
とは 、URL内に記述されるIDのことである。
#rails routes
#id有
/users/:id/follow(.:format)
#id無
/users/slide(.:format)
menber
はidが有り、collection
はidが無い。
◆member記入例
この場合はuser resources
にfollow action
のroutingをmember
で追加したとき、生成されたurlにuserを識別するための:idが自動で追加される。
#member記入例
resources :users do
member do
get :follow
end
end
#結果
follow_user GET /users/:id/follow(.:format) users#follow
memberルーティング
が1つだけしかない場合は、以下のようにルーティングで:onオプション
を指定することでブロックを省略できる。
resources :users do
get 'follow', on: :member
end
◆collection記入例
memberと同じように、user resources
にfollow action
のroutingをcollection
で追加したが、:id
は付与されない。
#collection記入例
resources :users do
collection do
get :slide
end
end
#結果
slide_users GET /users/slide(.:format) users#slide
collectionもmember同様に:onオプション
を使える。
resources :users do
get 'slide', on: :collection
end
###:onオプション
を使ってアクションを追加
また、:onオプション
を使って、たとえば以下のように別のnewアクションを追加することもできる。
resources :users do
get 'follow', on: :new
end
上記のようにすることで、GET + /users/new/follow
のようなパスが認識され、Usersコントローラのfollowアクションにルーティングされる。
##まとめ
◆ :id
を使用したアクションの場合はmember
を使用する。
◆:id
の必要ないアクションの場合は collection
を使用する。
##参考記事
railsのroutes.rbのmemberとcollectionの違いをわかりやすく解説してみた。〜rails初心者から中級者へ〜
Railsガイド