2010-11-18 16 views
6

No puedo encontrar la manera de hacerlo en los rieles 3.0. Tengo un controlador, products, y una acción, search, y en routes.rb He intentadoConfigurando rutas no reparables

resources :products, :collection => {:search => :post } 

y

match 'products/search' => 'products#search', :via => [:get, :post] 

y muchos otros ajustes, pero cada vez que accedo products/search todavía consigo un error quejándose de que el producto con id. search no se encuentra para la acción show. ¿Alguien sabe lo que estoy haciendo mal?

Gracias.

Respuesta

10

Estás cerca.

resources :products do 
    collection do 
    match 'search', :via => [:get, :post] 
    end 
end 

Como alternativa, también se puede hacer:

resources :products do 
    match 'search', :on => :collection, :via => [:get, :post] 
end 

Ver Rails Routing from the Outside In de las guías laterales para obtener más información, más específicamente:

+1

Guau, no sé cómo me perdí esa sección de la página "enrutamiento desde el exterior hacia adentro". Increíble. Gracias, muchachos, eso funcionó. – user508546

+0

Sin problema Me alegra que podamos ayudar. =) Es una pena que no puedas marcar las nuestras como respuestas. = D – John

4

En Rails 3, collection es ahora un bloque:

resources :products do 
    collection do 
    get :search 
    post :search 
    end 
end 

Esto le permitirá acceder a la acción ProductsController#search utilizando ya sea una solicitud o GETPOST.