web-dev-qa-db-fra.com

différence entre la route de collecte et la route de membre dans Ruby sur rails?

Quelle est la différence entre les itinéraires de collecte et les itinéraires des membres dans Rails?

Par exemple,

resources :photos do
  member do
    get :preview
  end
end

versus

resources :photos do
  collection do
    get :search
  end
end

Je ne comprends pas.

271
never_had_a_name

Un itinéraire membre nécessitera un ID, car il agit sur un membre. Une route de collection ne fonctionne pas car elle agit sur une collection d'objets. L'aperçu est un exemple d'itinéraire de membre, car il agit sur (et affiche) un seul objet. La recherche est un exemple d'itinéraire de collection, car elle agit sur (et affiche) une collection d'objets.

396
Theo
                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)
205
Amit Patel

La réponse de Theo est correcte. Pour des raisons de documentation, j'aimerais également noter que les deux généreront des aides de chemin différents.

member {get 'preview'} va générer:

preview_photo_path(@photo) # /photos/1/preview

collection {get 'search'} va générer:

search_photos_path # /photos/search

Notez la pluralité!

31
tybro0103

1) : collection - Ajouter des itinéraires nommés pour d’autres actions opérant sur la collection. Prend un hachage de #{action} => #{method}, où méthode est :get/:post/:put/:delete, un tableau de l'un des éléments précédents ou de: any si la méthode n'a pas d'importance. Ces itinéraires mappent vers une URL telle que / users/customers_list, avec un itinéraire de customers_list_users_url.

map.resources: utilisateurs,: collection => {: customers_list =>: get}

2) :member - Identique à :collection, mais pour les actions qui agissent sur un membre spécifique.

map.resources: utilisateurs,: membre => {: inactive =>: post}

il a traité comme /users/1;inactive=> [:action => 'inactive', :id => 1]

13
Beena Shetty