В чем разница между маршрутами сбора и маршрутами членов в Rails?
Например,
resources :photos do
member do
get :preview
end
end
против
resources :photos do
collection do
get :search
end
end
Я не понимаю.
В чем разница между маршрутами сбора и маршрутами членов в Rails?
Например,
resources :photos do
member do
get :preview
end
end
против
resources :photos do
collection do
get :search
end
end
Я не понимаю.
Для маршрута участника потребуется идентификатор, потому что он действует на члена. Маршрут сбора не происходит потому, что он действует на коллекцию объектов. Предварительный просмотр - пример маршрута участника, поскольку он воздействует на (и отображает) один объект. Поиск - пример маршрута сбора, поскольку он действует (и отображает) коллекцию объектов.
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)
Ответ Тео правильный. Для документации я хотел бы также отметить, что они будут генерировать разные помощники путей.
member {get 'preview'}
будет генерировать:
preview_photo_path(@photo) # /photos/1/preview
collection {get 'search'}
будет генерировать:
search_photos_path # /photos/search
Обратите внимание на множественность!
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]