2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

routes.rbのcollectionとmemberについて詳しく学習

Posted at

##そもそもcollectionやmemberってどんなときに使うか?
[結論]
「resourcesでroutingを設定しているとき、resourcesメソッドでは自動で生成されないactionへの
ルーティングを設定するとき」に使用する。

通常RailsのWebアプリケーションの中でルーティングを設定する際には7つのアクションを
自動生成してくれるresourcesメソッドを使用することが多いが、例えば投稿検索機能などを新たに追加で実装する際にはresourcesで設定できる7つのアクション以外にルーティングを生成しなければならない。そこでこういった場合にcollectionmemberを使用する。

##それではcollectionとmemberにはどんな違いがあるか?
[結論]
ルーティングを設定する際に**「:id」を含ませるかどうか**の違い。

collection ルーティングに「:id」がつかない
member ルーティングに「:id」がつかない

【例】collectionで定義した場合

route.rb
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で定義した場合

routes.rb
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初心者から中級者へ〜

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?