differenza tra il percorso di raccolta e il percorso membro in rubino su rotaie?


278

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:


407

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.


Che dire dell'azione di creazione? Diciamo che volevo fare un'alternativa a "creare" - sarebbe contato come membro?
digitalWestie,

1
Sì, creare è un'azione membro.
Theo,

1
Ma per quanto riguarda l'aggiunta di un "get" senza alcun blocco? È membro o percorso di raccolta? Il mio test ha mostrato la sua raccolta ma con un nome variabile ID diverso.
lzap,

6
Sei sicuro di creare un'azione membro. Non ci sono ID da passare.
George Shaw,

6
@YoniGeek. Non corretto. Vedi guide.rubyonrails.org/routing.html , 2.7 Risorse nidificate. Creare è sempre un'azione di raccolta durante l'aggiunta alla raccolta. Si noti che il percorso di creazione denominato è sempre plurale. Nel tuo esempio stai aggiungendo un nuovo voto alla raccolta di voti che appartengono a un membro di post. L'id si riferisce al post del membro, non alla raccolta di voti in corso di creazione. Il percorso denominato, ad esempio, sarebbe posts_votes_url.
George Shaw,

217
                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)

39
post più prezioso!
aldo.roman.nurena,

1
Dovrebbe usare search_photos_pathinvece di search_photos_urlcosì le persone non penseranno _pathe _urlsono una differenza tra i due.
Joshua Pinter,

31

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à!


14

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]


bell'esempio. spiegazione in alto avrebbe potuto essere migliore però.
hitesh israni,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.