Qual é a diferença entre rotas de coleta e rotas de membros no Rails?
Por exemplo,
resources :photos do
member do
get :preview
end
end
versus
resources :photos do
collection do
get :search
end
end
Eu não entendo
Qual é a diferença entre rotas de coleta e rotas de membros no Rails?
Por exemplo,
resources :photos do
member do
get :preview
end
end
versus
resources :photos do
collection do
get :search
end
end
Eu não entendo
Respostas:
Uma rota de membro exigirá um ID, porque atua em um membro . Uma rota de coleção não funciona porque age em uma coleção de objetos. A visualização é um exemplo de uma rota de membro, porque atua em (e exibe) um único objeto. A pesquisa é um exemplo de uma rota de coleção, porque atua (e exibe) uma coleção de objetos.
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
vez de search_photos_url
para que as pessoas não pensem _path
e _url
são uma diferença entre os dois.
A resposta de Theo está correta. Para fins de documentação, eu também gostaria de observar que os dois irão gerar ajudantes de caminho diferentes.
member {get 'preview'}
irá gerar:
preview_photo_path(@photo) # /photos/1/preview
collection {get 'search'}
irá gerar:
search_photos_path # /photos/search
Observe a pluralidade!
1) : coleção - Adicione rotas nomeadas para outras ações que operam na coleção. Obtém um hash de #{action} => #{method}
, onde método é :get/:post/:put/:delete
, uma matriz de qualquer um dos anteriores, ou: any, se o método não importa. Essas rotas são mapeadas para um URL como / users / customers_list , com uma rota de customers_list_users_url .
map.resources: users,: collection => {: customers_list =>: get}
2) :member
- O mesmo que :collection
, mas para ações que operam em um membro específico.
map.resources: users,: member => {: inactive =>: post}
tratou como /users/1;inactive=> [:action => 'inactive', :id => 1]