2010-04-11 9 views
5

Estoy tratando de agregar una ruta personalizada para mis rutas REST utilizando el parámetro :collection en map.resources así:Paso de parámetros a la costumbre rutas de descanso en los carriles (usando: Colección)

map.resources :products, :collection => { :tagged => :get } 

La acción etiquetada toma en una : parámetro de etiqueta. Puedo hacer un enlace a la ruta URL usando: tagged_products_path(:tag => tag.name). Mi problema con esto es que la URL que esto genera:

/products/tagged?tag=electronic 

me gustaría la etiqueta para estar en el URL y no la etiqueta, así:

/products/tagged/electronic 

Por supuesto, esto se puede lograr por una ruta nombrada por separado, pero me pregunto si me falta algo y hay una manera de hacerlo con el hash :collection.

Gracias de antemano por su ayuda

-Damien

Respuesta

4

rutas de recolección no apoyar este - que tendrá que utilizar una ruta de llamada.

map.tagged_products '/products/tagged/:tag', 
    :controller => 'products', :action => 'tagged', :conditions => { :method => :get } 
+0

Eso es lo que supuse, gracias por la entrada. – dwhite

1

Las rutas de recopilación no son compatibles, pero hay una solución.

"#{tagged_products_path}?#{{:tag => tag.name}.to_query}}" 
+2

Esto sería más útil si se proporcionara el contexto, p. "agregue esto a su código de modelo" o "esto debería ir en su routes.rb". – pjmorse

3

Como la respuesta es para Rails 2, solo quería agregar la versión Rails 4 de esto.

get '/products/tagged/:tag' => 'products#tagged', as: :tagged_products 

Esto se usaría como

tagged_products_path('electronic') #=> "/products/tagged/electronic" 
Cuestiones relacionadas