ルーティングのmemberとcollection
32日目です。
カリキュラムで紹介されていたRailsのコーディング規約を紹介しているサイトで、下記のようなRoutingについての記載がありました。
「RESTfulなresourceにアクションを追加するときはmemberとcollectionを利用しましょう」
...RESTful(落ち着いた、安らかな?)なresourceってなんだ?と思いつつ、そういえばカリキュラムで作ったRailsアプリのルーティングにcollection出てきたなあ、、メンターが「今は理解しなくていい」と濁したから結局理解し損ねていたなあ、、と思ったので調べました。
memberとcollection
下記のサイトは対象読者が「rails tutorialも終わり、resourcesはわかるけどmemberとかcollectionは知らない人。」だったので、自分にとってもちょうどいいと思いました。
qiita.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」自身のことを指していたのではないかなと勝手に納得しました笑
コーディング規約紹介サイト
github.com
本日はGit、GitHub、GitHubDesktopの使い方について学習しました。
毎日知らないことが滝のように降りかかってきて必死で捌いている感じですが、プログラミングの勉強自体は楽しいので毎日スクールに行くのが楽しみです。
明日はSQL、データベースなど学びます。