Разница между маршрутом сбора и маршрутом участника в рубине на рельсах?

В чем разница между маршрутами сбора и маршрутами членов в Rails?

Например,

resources :photos do
  member do
    get :preview
  end
end

против

resources :photos do
  collection do
    get :search
  end
end

Я не понимаю.

Ответ 1

Для маршрута участника потребуется идентификатор, потому что он действует на члена. Маршрут сбора не происходит потому, что он действует на коллекцию объектов. Предварительный просмотр - пример маршрута участника, поскольку он воздействует на (и отображает) один объект. Поиск - пример маршрута сбора, поскольку он действует (и отображает) коллекцию объектов.

Ответ 2

                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)

Ответ 3

Ответ Тео правильный. Для документации я хотел бы также отметить, что они будут генерировать разные помощники путей.

member {get 'preview'} будет генерировать:

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

collection {get 'search'} будет генерировать:

search_photos_path # /photos/search

Обратите внимание на множественность!

Ответ 4

1) : коллекция. Добавьте именованные маршруты для других действий, которые работают с коллекцией. Принимает хэш #{action} => #{method}, где метод :get/:post/:put/:delete, массив любого из предыдущего, или: любой, если метод не имеет значения. Эти маршруты сопоставляются с URL, например /users/customers_list, с маршрутом clients_list_users_url.

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

2) :member - То же, что и :collection, но для действий, которые работают на   конкретный член.

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

он обрабатывается как /users/1;inactive=> [:action => 'inactive', :id => 1]