配置非restful路由

use*_*546 6 ruby ruby-on-rails ruby-on-rails-3

我无法弄清楚如何在rails 3.0中执行此操作.我有一个控制器,products一个动作search,并且在routes.rb我尝试过

resources :products, :collection => {:search => :post }
Run Code Online (Sandbox Code Playgroud)

match 'products/search' => 'products#search', :via => [:get, :post]
Run Code Online (Sandbox Code Playgroud)

和许多其他设置,但每当我访问products/search我仍然得到一个错误抱怨具有id的产品search,无法找到该操作show.谁知道我做错了什么?

谢谢.

Joh*_*ohn 10

你很亲密

resources :products do
  collection do 
    match 'search', :via => [:get, :post]
  end
end
Run Code Online (Sandbox Code Playgroud)

或者,您也可以这样做:

resources :products do
  match 'search', :on => :collection, :via => [:get, :post]
end
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Edge Guides 外部的Rails路由,更具体地说: