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

すくいルートもOK:私はこのような何かを書く場合

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 %> 

私はここで何をしないのです?私はそれがsearch_items_path

とルートを複数形する必要があると考えてい

答えて

4

はあなたのルートがidを探している、とsearch_item_path(@item)を呼び出さなければなりません

resources :items do 
    collection do 
    get :search 
    end 
end 

または

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

私は 'as =>:search'を削除しました。そしてyes、それは複数の名前' search_items_path'です。私は 'search_item_path'を試してみましたが、なぜ初めて働かなかったのですか?ありがとう。 –

1

少しきれいかもしれません?

何かが正しくありません。 routes.rbを指定すると、次のようになります。

search_items GET /items/search(.:format) 

ここにすべてが表示されていますか?あなたのサンプルは収集ルートを定義しますが、routes.rbの出力はそれをメンバールートとして示しています。

+0

それは 'コレクション'ルート – fl00r

+0

です。だから、なぜIDを期待していますか? – numbers1311407

関連する問題