Яка різниця між маршрутами збору та маршрутами-членами в 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) : колекція - додайте названі маршрути для інших дій, що діють над колекцією. Займає хеш #{action} => #{method}
, де метод є :get/:post/:put/:delete
, масив будь-якого з попередніх, або: будь-який, якщо метод не має значення. Ці маршрути зіставляються з такою URL-адресою, як / users / customers_list , з маршрутом customers_list_users_url .
map.resources: користувачів,: collection => {: customers_list =>: get}
2) :member
- Те саме :collection
, але для дій, що діють на конкретному члені.
map.resources: користувачів,: member => {: неактивний =>: пост}
це трактували як /users/1;inactive=> [:action => 'inactive', :id => 1]