В чем разница между маршрутами сбора и маршрутами членов в 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)
search_photos_path
вместо того, search_photos_url
чтобы люди не думали _path
и _url
разница между ними.
Тео ответ правильный. Ради документации, я хотел бы также отметить, что эти два будут генерировать разные помощники пути.
member {get 'preview'}
сгенерирует:
preview_photo_path(@photo) # /photos/1/preview
collection {get 'search'}
сгенерирует:
search_photos_path # /photos/search
Обратите внимание на множественность!
1) : collection - добавить именованные маршруты для других действий, которые работают с коллекцией. Принимает хеш #{action} => #{method}
, где метод является :get/:post/:put/:delete
, массивом любого из предыдущих или: any, если метод не имеет значения. Эти маршруты отображаются на URL-адрес, такой как / users / Customers_list , с маршрутом customer_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]