ルーティングのmemberとcollection

32日目です。
カリキュラムで紹介されていたRailsのコーディング規約を紹介しているサイトで、下記のようなRoutingについての記載がありました。
「RESTfulなresourceにアクションを追加するときはmemberとcollectionを利用しましょう」
...RESTful(落ち着いた、安らかな?)なresourceってなんだ?と思いつつ、そういえばカリキュラムで作ったRailsアプリのルーティングにcollection出てきたなあ、、メンターが「今は理解しなくていい」と濁したから結局理解し損ねていたなあ、、と思ったので調べました。

memberとcollection

下記のサイトは対象読者が「rails tutorialも終わり、resourcesはわかるけどmemberとかcollectionは知らない人。」だったので、自分にとってもちょうどいいと思いました。
qiita.com

また、下記のサイトも理解を助けてくれました。

miningoo.com

memberとcollectionが使用される目的

resourcesでルーティングを設定しているとき、resourcesでは自動生成されないactionへのルーティングを設定するときに使用する。
(自動生成されるのは、index, show, new, edit, create, update, destroyの7つのアクション)

resources :users do
  member do
    get : follow
  end
end

上記の設定をすると、ビューから送られてくる/users/1/followと言うようなURLをrailsが認識してくれるので、users controllerのfollow actionをルーティングにし、idの値をparams[:id]に渡してくれる。

memberは、生成されるurlにuserを識別するための:idをつけたい時使用

(rake routes)  
follow_user GET   /users/:id/follow(.:format)   users#follow

collectionはslide actionのurlにuserを識別するための:idがつかない

(rake routes)  
slide_users GET   /users/slide(.:format)  users#slide

簡潔にまとめると、「自動生成される7つのアクション以外でルーティングを設定したいアクションがある時にmemberかcollection使用する」と言えるのかなと思いました。

ただRESTfulなresourceとはなんぞやと疑問が生まれたのでもう少し調べました。

RESTful
RESTの原則に従って実装されているシステムのこと
Webに運用したソフトウェア設計様式を備えたルート(REST)のことで、URLで表現することができる。
つまりURLに対してHTTPのメソッドを利用することで統一感のある、意味がつかみやすいURLを設計することができる。

REST
インターネット(Web)上でいろいろな情報や機能を結びつける方法、あるいは考え方のひとつ。


インターネット上にある情報やデータ(リソース)は、すべて固有の名前(URN)か固有の住所(URL)を持っている。この URN と URL を合わ> せて URI という。
そして、URI を指定することでリソースにアクセスし、そのリソースに対してHTTPメソッド(「GET」や「POST」など)を送ることで操作するという考え方 REST では明示的に HTTP メソッドを使う必要があり、しかも HTTP プロトコルの定義どおりの方法で使う必要があるので基本的な設計原則によって、CRUD (create、read、update、delete) 操作とHTTPメソッドとが 1 対 1 に対応付けられる

resource
resourceは単数形リソースと呼ばれる。
場合によっては、ユーザーがページを表示する時にidを参照することのないリソースが使用されることがある。たとえば、マイページ(ここでは/profileとする)のように「現在ログインしているユーザー自身」のプロファイルを表示し、他のユーザーidを参照する必要がない場合には、単数形リソースを使用してshowアクションに (/profile/:idではなく) /profileを割り当てることができる。

色々な表現が出てきましたが、「RESTfulなresource」とは7つのアクションを生成してくれる「resources」自身のことを指していたのではないかなと勝手に納得しました笑

qiita.com

qiita.com

コーディング規約紹介サイト
github.com


本日はGit、GitHub、GitHubDesktopの使い方について学習しました。
毎日知らないことが滝のように降りかかってきて必死で捌いている感じですが、プログラミングの勉強自体は楽しいので毎日スクールに行くのが楽しみです。
明日はSQL、データベースなど学びます。