メンバー/コレクション

# メンバー、コレクションとは
>"メンバー"アクションとは、個別のリソースに適用され、アクションの対象となる`特定のリソースを識別するためにIDを指定する必要のあるアクション（showやeditなど）`を指します。"コレクション"アクションとは、`リソースのセット全体を操作するアクション（indexなど）`を指します。

https://railsguides.jp/routing.html#:~:text=%22%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%22%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%81%AF%E3%80%81%E5%80%8B%E5%88%A5%E3%81%AE%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AB%E9%81%A9%E7%94%A8%E3%81%95%E3%82%8C%E3%80%81%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%AF%BE%E8%B1%A1%E3%81%A8%E3%81%AA%E3%82%8B%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%92%E8%AD%98%E5%88%A5%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABID%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%AE%E3%81%82%E3%82%8B%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%EF%BC%88show%E3%82%84edit%E3%81%AA%E3%81%A9%EF%BC%89%E3%82%92%E6%8C%87%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%22%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%22%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E3%81%AF%E3%80%81%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E5%85%A8%E4%BD%93%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%EF%BC%88index%E3%81%AA%E3%81%A9%EF%BC%89%E3%82%92%E6%8C%87%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

>2.10 RESTfulなルーティングをさらに追加する
デフォルトで作成されるRESTfulなルーティングは7つありますが、7つと決まっているわけではありません。必要であれば、コレクションやコレクションの各メンバーに対して適用されるルーティングを追加することも可能です。


>以下のセクションでは、メンバールーティングとコレクションルーティングの追加について説明します。`memberという用語は、単一の要素に作用するルーティング（show、update、destroyなど）`を指します。`collectionという用語は、複数の要素（要素のコレクション）を操作するルーティング（indexルーティングなど）`を指します。

### メンバー
>2.10.1 メンバールーティングを追加する
memberブロックは、以下のようにリソースブロックに追加できます。
```rb
resources :photos do
  member do
    get "preview"
  end
end
```
#### 省略型
```rb
resources :photos do
  get "preview", on: :member
end
```
```
     Prefix Verb   URI Pattern                                                                                       Controller#Action
                           preview_photo GET    /photos/:id/preview(.:format)                                                                     photos#preview
                                  photos GET    /photos(.:format)                                                                                 photos#index
                                         POST   /photos(.:format)                                                                                 photos#create
                               new_photo GET    /photos/new(.:format)                                                                             photos#new
                              edit_photo GET    /photos/:id/edit(.:format)                                                                        photos#edit
                                   photo GET    /photos/:id(.:format)                                                                             photos#show
                                         PATCH  /photos/:id(.:format)                                                                             photos#update
                                         PUT    /photos/:id(.:format)                                                                             photos#update
                                         DELETE /photos/:id(.:format)                                                                             photos#destroy
```
* idを使ったurlになっている

### コレクション
>2.10.2 コレクションルーティングを追加する
ルーティングにコレクション（collection）を追加するには以下のようにcollectionブロックを使います。
```rb
resources :photos do
  collection do
    get "search"
  end
end
```
>上のルーティングは、GETリクエスト + /photos/searchなどの（idを伴わない）パスを認識し、リクエストをPhotosコントローラのsearchアクションにルーティングします。このときsearch_photos_urlやsearch_photos_pathルーティングヘルパーも同時に作成されます。

>collectionルーティングでもmemberルーティングのときと同様に:onオプションを使えます。
#### 省略型
```rb
resources :photos do
  get "search", on: :collection
end
```
https://railsguides.jp/routing.html#restful%E3%81%AA%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E3%81%95%E3%82%89%E3%81%AB%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B
```
Prefix Verb   URI Pattern                                                                                       Controller#Action
                          preview_photos GET    /photos/preview(.:format)                                                                         photos#preview
                                  photos GET    /photos(.:format)                                                                                 photos#index
                                         POST   /photos(.:format)                                                                                 photos#create
                               new_photo GET    /photos/new(.:format)                                                                             photos#new
                              edit_photo GET    /photos/:id/edit(.:format)                                                                        photos#edit
                                   photo GET    /photos/:id(.:format)                                                                             photos#show
                                         PATCH  /photos/:id(.:format)                                                                             photos#update
                                         PUT    /photos/:id(.:format)                                                                             photos#update
                                         DELETE /photos/:id(.:format)                                                                             photos#destroy
```
* idを使っていない