Jaka jest różnica między trasami zbierania a trasami członków w Railsach?
Na przykład,
resources :photos do
member do
get :preview
end
end
przeciw
resources :photos do
collection do
get :search
end
end
Nie rozumiem.
Jaka jest różnica między trasami zbierania a trasami członków w Railsach?
Na przykład,
resources :photos do
member do
get :preview
end
end
przeciw
resources :photos do
collection do
get :search
end
end
Nie rozumiem.
Odpowiedzi:
Trasa członka będzie wymagać identyfikatora, ponieważ działa na członka . Trasa kolekcji nie działa, ponieważ działa na kolekcję obiektów. Podgląd jest przykładem trasy członka, ponieważ działa na (i wyświetla) pojedynczy obiekt. Wyszukiwanie jest przykładem trasy kolekcji, ponieważ działa na kolekcję obiektów (i wyświetla ją).
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
zamiast, search_photos_url
aby ludzie nie myśleli _path
i _url
są różnicą między nimi.
Odpowiedź Theo jest poprawna. Ze względu na dokumentację chciałbym również zauważyć, że te dwa generują różne pomocniki ścieżki.
member {get 'preview'}
wygeneruje:
preview_photo_path(@photo) # /photos/1/preview
collection {get 'search'}
wygeneruje:
search_photos_path # /photos/search
Zwróć uwagę na wiele!
1) : kolekcja - dodaj nazwane trasy dla innych działań, które działają na kolekcji. Pobiera skrót #{action} => #{method}
, gdzie metoda jest :get/:post/:put/:delete
, tablicy dowolnej z poprzednich lub: dowolna, jeśli metoda nie ma znaczenia. Trasy te są mapowane na adres URL taki jak / users / users_list , z trasą customer_list_users_url .
map.resources: users,: collection => {: clients_list =>: get}
2) :member
- To samo co :collection
, ale dla akcji, które działają na określonym elemencie.
map.resources: users,: member => {: inactive =>: post}
traktowane jak /users/1;inactive=> [:action => 'inactive', :id => 1]