2011-08-14 67 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