form_tag无法正确路由

时间:2011-10-06 15:37:17

标签: ruby-on-rails ruby form-for

我正在尝试在rails 3中使用表单标记,但我一直收到路由错误:

没有路线匹配{:action =>“search”,:controller =>“posts”}。

以下是for_tag的代码:

 <%= form_tag search_post_path, method: :get do %>
    <br />
    <fieldset>
      <legend>Search</legend>
      <%= text_field_tag :search, params[:search], :id => 'search_field' %>
      <%= submit_tag "Search", :name => nil %>
      <%= link_to_function "Clear", "$('search_field').clear()" %>
    </fieldset>
    <br />
  <% end %>

我的posts_controller中有一个名为search的方法。这是我的routes.rb文件中的内容:

 post 'search' => 'posts#search'

  resources :posts do
    member do
      post 'search'
      get 'search'
    end
  end

我觉得我已尝试过路线文件中的所有内容,但没有任何效果。有一次我得到了for_for,但是当我点击提交按钮时,我的方法'搜索'得到了一个N​​oMethodError。

1 个答案:

答案 0 :(得分:2)

您的路线“搜索”位于会员身上,因此匹配的网址为/ posts /:id / search。 但是,您不提供ID,因此错误。 您应该将搜索路径放在集合块中,如下所示:

resources :posts do
  collection do
    get 'search'
  end
end

所以匹配的网址是/ posts / search。