2010-11-18 13 views
6

Ich kann nicht herausfinden, wie dies in Schienen 3.0 zu tun. Ich habe einen Controller, products, und eine Aktion, search und in routes.rb habe ich versucht,Konfigurieren nicht-erholsamen Routen

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

und

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

und viele andere Einstellungen, aber wenn ich products/search greife ich immer noch einen Fehler sich beschweren, dass das Produkt mit der ID search nicht für die Aktion show gefunden werden kann. Wer weiß, was ich falsch mache?

Danke.

Antwort

10

Sie sind in der Nähe.

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

Alternativ können Sie auch tun:

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

Siehe Rails Routing from the Outside In der Kantenführungen für weitere Informationen, genauer gesagt:

+1

Wow, ich weiß nicht, wie ich diesen Abschnitt der "routing from outside in" Seite verpasst habe. Genial. Danke, Leute, das hat funktioniert. – user508546

+0

Kein Problem. Schön, dass wir helfen konnten. =) Es ist schade, dass Sie nicht beide als Antworten markieren können. = D – John

4

In Rails 3, collection ist nun ein Block:

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

Dies ermöglicht es Ihnen, die ProductsController#search Aktion für den Zugriff auf entweder mit einer GET oder POST Anfrage.