Help us understand the problem. What is going on with this article?

railsのroutes.rbのmemberとcollectionの違いをわかりやすく解説してみた。〜rails初心者から中級者へ〜

More than 1 year has passed since last update.

この記事の対象者

rails tutorialも終わり、resourcesはわかるけどmemberとかcollectionは知らない人。

内容

routes.rbで使用される、memberとcollectionの違いを解説します。

memberとcollectionが使用される目的

どちらもresourcesでroutingを設定しているとき、resourcesでは自動で生成されないactionへのroutingを設定するときに使用する。

resources :users do
    member do
      get :follow
        #follow_user GET    /users/:id/follow(.:format)            users#follow
      get :like
        #like_user GET    /users/:id/like(.:format)                users#like
    end
end

user resourcesをroutingに設定しているとき、users controllerのfollow actionをroutingに設定したいって思ったとき、こんな感じで使用します。

memberとcollectionの違い

生成するroutingに、:idが付くか付かないか。

memberは付いてcollectionは付かないです。

memberの特徴

:idが付く。以上。

そんな事言ったら怒られそうなので詳しく書きます。

resources :users do
    member do
      get :follow
    end
end
follow_user GET    /users/:id/follow(.:format)                    users#follow

こんな感じでuser resourcesにfollow actionのroutingをmemberで追加したとき、生成されたurlにuserを識別するための:idが自動で追加されます。

collection

memberの時と同様に、user resourcesにslide actionへのroutingを追加します。

resources :users do
    collection do
      get :slide
    end
end
slide_users GET    /users/slide(.:format)                        users#slide

こんな感じで追加されるslide actionのurlにはuserを識別するための:idがつきません。

最後に

最後までお読みくださりありがとうございました。なんか間違いあれば指摘ください。

hirokihello
エンジニア since 2019/2~ front/server/infraなんでもやります。セキュリティやネットワーク周りは苦手です... terraform使ったfargateとかk8sとかの構築が最近の趣味です。最近のお仕事はフロントばっかでreact/ts書いてます。でも一番かけるのはrubyです。
https://hirokihello.xyz
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away