2011-08-14 50 views
0

我已经添加了一个方法到我的控制器并正确路由,但是当我尝试从form_tag调用它时,它给我一个路由器错误。这是怎么回事?form_tag不按预期方式工作

<% form_tag search_item_path, :method => 'get' do %> 
    <%= text_field_tag :name , '' %> 
    <%= submit_tag "Submit" %> 
<% end %> 

路线:

resources :items do 
    collection do 
     get :search, :as => :search 
    end 
end 

耙路线也行:

search_item GET /items/:id/search(.:format)      {:action=>"search", :controller=>"items"} 
     items GET /items(.:format)         {:action=>"index", :controller=>"items"} 
      POST /items(.:format)         {:action=>"create", :controller=>"items"} 
    new_item GET /items/new(.:format)        {:action=>"new", :controller=>"items"} 
    edit_item GET /items/:id/edit(.:format)       {:action=>"edit", :controller=>"items"} 
     item GET /items/:id(.:format)        {:action=>"show", :controller=>"items"} 
      PUT /items/:id(.:format)        {:action=>"update", :controller=>"items"} 
      DELETE /items/:id(.:format)        {:action=>"destroy", :controller=>"items 

不过,如果我写的东西是这样工作的:

<% form_tag url_for(:controller => "items" , :action => "search"), :method => "get" do %> 

缺少什么我在这里?

回答

4

我认为应该使用复数search_items_path

和路线可能是少许清洁剂

resources :items do 
    collection do 
    get :search 
    end 
end 

resources :items do 
    get :search, :on => :collection 
end 
+0

我确实删除了'as =>:search',是的,它是一个复数名称'search_items_path'。我试过'search_item_path'这就是为什么第一次不工作。谢谢。 –

1

你的路线寻找一个id,而且必须以search_item_path(@item)被称为?

东西不对。使用您提供的routes.rb,应该如下所示:

search_items GET /items/search(.:format) 

我们在这里看到了什么吗?您的示例定义了一个收集路线,但您的routes.rb的输出将其显示为成员路线。

+0

它正是'集合'路线 – fl00r

+0

,那么它为什么期待一个ID? – numbers1311407