##そもそもcollectionやmemberってどんなときに使うか?
[結論]
「resourcesでroutingを設定しているとき、resourcesメソッドでは自動で生成されない
actionへの
ルーティングを設定するとき」に使用する。
通常RailsのWebアプリケーションの中でルーティングを設定する際には7つのアクションを
自動生成してくれるresources
メソッドを使用することが多いが、例えば投稿検索機能などを新たに追加で実装する際にはresourcesで設定できる7つのアクション以外にルーティングを生成しなければならない。そこでこういった場合にcollection
やmember
を使用する。
##それではcollectionとmemberにはどんな違いがあるか?
[結論]
ルーティングを設定する際に**「:id」を含ませるかどうか**の違い。
collection | ルーティングに「:id」がつかない |
member | ルーティングに「:id」がつかない |
【例】collection
で定義した場合
Rails.application.routes.draw do
resources :tweets do
collection do
get 'search'
end
end
end
【例】collectionのルーティング
Prefix Verb URI Pattern
search_tweets GET /tweets/search(.:format) tweets#search
※上記をみると「:id」がついていないのが確認できる。
つまり投稿一覧ページのようにデータを特定する必要がない
場合はcollectionでOK!!
【例】member
で定義した場合
Rails.application.routes.draw do
resources :tweets do
member do
get 'search'
end
end
end
【例】memberのルーティング
Prefix Verb URI Pattern
search_tweet GET /tweets/:id/search(.:format) tweets#search
※上記をみると「:id」がついているが確認できる。
つまり詳細ページのようにデータを特定する必要がある
場合はmemberを使用!!
##まとめ
collectionやmemberはルーティングの設定でresourcesメソッド
を使用した際に
新たにアクションを追加したい場合に使用する。
またそのアクションを動かすときにparamsで**「:id」を受け取りたい場合はmember
を使用し、
特にid**を指定して特定のページにいく必要がない場合は、collection
を使用してアクションを追加する。
自分自身検索機能を入れた時に使用したこの部分の概念がとても難しいと感じ、
よく理解できていなかったが、再度調べてなおして学習してみると意外と悩まず理解することができました。
********************************************
参考記事
railsのroutes.rbのmemberとcollectionの違いをわかりやすく解説してみた。〜rails初心者から中級者へ〜