Was ist der Unterschied zwischen Sammelrouten und Mitgliedsrouten in Rails?
Zum Beispiel,
resources :photos do
member do
get :preview
end
end
gegen
resources :photos do
collection do
get :search
end
end
Ich verstehe nicht.
Was ist der Unterschied zwischen Sammelrouten und Mitgliedsrouten in Rails?
Zum Beispiel,
resources :photos do
member do
get :preview
end
end
gegen
resources :photos do
collection do
get :search
end
end
Ich verstehe nicht.
Antworten:
Für eine Mitgliederroute ist eine ID erforderlich, da sie auf ein Mitglied wirkt . Eine Sammelroute funktioniert nicht, weil sie auf eine Sammlung von Objekten wirkt. Die Vorschau ist ein Beispiel für eine Mitgliedsroute, da sie auf ein einzelnes Objekt wirkt (und es anzeigt). Die Suche ist ein Beispiel für eine Sammlungsroute, da sie auf eine Sammlung von Objekten wirkt (und diese anzeigt).
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
stattdessen verwenden, search_photos_url
damit die Leute nicht denken _path
und _url
einen Unterschied zwischen den beiden machen.
Theos Antwort ist richtig. Aus Gründen der Dokumentation möchte ich auch darauf hinweisen, dass die beiden unterschiedliche Pfadhelfer generieren.
member {get 'preview'}
wird erzeugen:
preview_photo_path(@photo) # /photos/1/preview
collection {get 'search'}
wird erzeugen:
search_photos_path # /photos/search
Beachten Sie die Vielzahl!
1) : Sammlung - Fügen Sie benannte Routen für andere Aktionen hinzu, die für die Sammlung ausgeführt werden. Nimmt einen Hash von #{action} => #{method}
, wobei die Methode :get/:post/:put/:delete
ein Array eines der vorherigen ist, oder: any, wenn die Methode keine Rolle spielt. Diese Routen werden einer URL wie / users / customers_list mit einer Route von customers_list_users_url zugeordnet .
map.resources: users ,: collection => {: customers_list =>: get}
2) :member
- Wie :collection
, jedoch für Aktionen, die für ein bestimmtes Mitglied ausgeführt werden.
map.resources: users ,: member => {: inactive =>: post}
es behandelt als /users/1;inactive=> [:action => 'inactive', :id => 1]