form_tag未按预期工作

时间:2011-08-14 16:09:50

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

我已经向我的控制器添加了一个方法并正确路由它但是当我尝试从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

rake路线也可以:

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

我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

我认为它应该是多元化的search_items_path

路线可能更清洁

resources :items do
  collection do
    get :search
  end
end

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

答案 1 :(得分:1)

您的路线正在寻找id,必须使用search_item_path(@item)来调用?

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

search_items GET /items/search(.:format)

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