レール上のルビーの収集ルートとメンバールートの違いは?


278

Railsのコレクションルートとメンバールートの違いは何ですか?

例えば、

resources :photos do
  member do
    get :preview
  end
end

resources :photos do
  collection do
    get :search
  end
end

わかりません。

回答:


407

それは上で動作するため、会員のルートは、IDが必要になりますメンバー。オブジェクトのコレクションに作用するため、コレクションルートは機能しません。プレビューは単一のオブジェクトに作用(および表示)するため、メンバールートの例です。検索はオブジェクトのコレクションに作用する(そして表示する)ため、コレクションルートの例です。


作成アクションはどうですか?「作成」に代わるものを作りたかったとしましょう-メンバーとしてカウントされますか?
digitalWestie

1
はい、作成はメンバーアクションです。
Theo

1
しかし、ブロックなしで「get」を追加するのはどうでしょうか。メンバーですか、それとも収集ルートですか?私のテストでは、コレクションを示しましたが、id変数名が異なりました。
lzap '19

6
メンバーアクションとして作成してもよろしいですか?渡すIDはありません。
ジョージショー

6
@YoniGeek。正しくありません。guides.rubyonrails.org/routing.html、2.7ネストされたリソースを参照してください。コレクションに追加するとき、作成は常にコレクションアクションです。名前付き作成パスは常に複数形であることに注意してください。あなたの例では、投稿のメンバーに属する投票のコレクションに新しい投票を追加しています。idは、作成される投票のコレクションではなく、メンバーの投稿を指します。名前付きパスは、たとえば、posts_votes_urlになります。
ジョージショー

217
                URL                 Helper                      Description
----------------------------------------------------------------------------------------------------------------------------------
member          /photos/1/preview   preview_photo_path(photo)   Acts on a specific resource so required id (preview specific photo)
collection      /photos/search      search_photos_path          Acts on collection of resources(display all photos)

39
最も貴重な投稿!
aldo.roman.nurena 2013

1
使用する必要がありますsearch_photos_path代わりにsearch_photos_url、人々は考えてないように_path_url2の間の差です。
Joshua Pinter 2016

31

テオの答えは正しいです。ドキュメントのために、2つは異なるパスヘルパーを生成することにも注意したいと思います。

member {get 'preview'} 生成されます:

preview_photo_path(@photo) # /photos/1/preview

collection {get 'search'} 生成されます:

search_photos_path # /photos/search

複数に注意!


14

1) :collection-コレクションを操作する他のアクションの名前付きルートを追加します。#{action} => #{method}methodが:get/:post/:put/:delete、前のいずれかの配列、またはメソッドが重要でない場合は:anyのハッシュを取ります。これらのルートは、customers_list_users_urlのルートを使用して、/ users / customers_listのようなURLにマップします

map.resources:users、:collection => {:customers_list =>:get}

2):member-と同じ:collectionですが、特定のメンバーを操作するアクション用です。

map.resources:users、:member => {:inactive =>:post}

それは /users/1;inactive=> [:action => 'inactive', :id => 1]


良い例です。上部の説明はもっと良かったかもしれません。
hitesh israni
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.