2010-11-18 18 views
6

Non riesco a capire come farlo in rails 3.0. Ho un controllore, products, e un'azione, search, e in routes.rb ho provatoConfigurazione di route non restful

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

e

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

e molte altre impostazioni, ma ogni volta che accedo products/search ho ancora un errore lamentandosi del fatto che il prodotto con id, search, non può essere trovato per l'azione show. Qualcuno sa cosa sto sbagliando?

Grazie.

risposta

10

Sei vicino.

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

In alternativa, si potrebbe anche fare:

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

Vedi Rails Routing from the Outside In delle le guide laterali per ulteriori informazioni, in particolare:

+1

Wow, non so come ho perso quella sezione della pagina "routing dall'esterno in". Eccezionale. Grazie, ragazzi, ha funzionato. – user508546

+0

Nessun prob. Sono contento che potremmo aiutare. =) È un peccato non poter contrassegnare entrambe le nostre come risposte. = D – John

4

In Rails 3, collection è ora un blocco:

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

Questo vi permetterà di accedere all'azione ProductsController#search utilizzando una richiesta GET o POST.

Problemi correlati