Qual è la differenza tra le rotte di raccolta e le rotte membro in Rails?
Per esempio,
resources :photos do
member do
get :preview
end
end
contro
resources :photos do
collection do
get :search
end
end
Non capisco.
Qual è la differenza tra le rotte di raccolta e le rotte membro in Rails?
Per esempio,
resources :photos do
member do
get :preview
end
end
contro
resources :photos do
collection do
get :search
end
end
Non capisco.
Risposte:
Una route membro richiederà un ID, poiché agisce su un membro . Un percorso di raccolta non funziona perché agisce su una raccolta di oggetti. L'anteprima è un esempio di una route membro, poiché agisce (e visualizza) su un singolo oggetto. La ricerca è un esempio di un percorso di raccolta, poiché agisce (e visualizza) una raccolta di oggetti.
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
invece di search_photos_url
così le persone non penseranno _path
e _url
sono una differenza tra i due.
La risposta di Theo è corretta. Per motivi di documentazione, vorrei anche notare che i due genereranno diversi aiutanti di percorso.
member {get 'preview'}
genererà:
preview_photo_path(@photo) # /photos/1/preview
collection {get 'search'}
genererà:
search_photos_path # /photos/search
Nota la pluralità!
1) : raccolta : aggiungi percorsi denominati per altre azioni che operano sulla raccolta. Prende un hash di #{action} => #{method}
, dov'è il metodo :get/:post/:put/:delete
, una matrice di uno dei precedenti, o: any se il metodo non ha importanza. Queste rotte sono associate a un URL come / users / customers_list , con una route di customers_list_users_url .
map.resources: users,: collection => {: customers_list =>: get}
2) :member
- Come :collection
, ma per le azioni che operano su un membro specifico.
map.resources: users,: member => {: inactive =>: post}
trattato come /users/1;inactive=> [:action => 'inactive', :id => 1]