配置非restful路由

时间:2010-11-18 17:01:22

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

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

以及许多其他设置,但每当我访问products/search时,我仍然会收到错误报告,指出无法为动作search找到ID为show的产品。谁知道我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:10)

你很亲密。

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

或者,您也可以这样做:

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

有关详细信息,请参阅Edge Guides的Rails Routing from the Outside In

答案 1 :(得分:4)

在Rails 3中,collection现在是一个块:

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

这样您就可以使用ProductsController#searchGET请求访问POST操作。