从表单POST到自动操作未处理的自定义操作 - 改为路由错误

时间:2011-10-29 08:12:54

标签: ruby-on-rails custom-action rails-routing

我有一个需要POST到'users / search'的搜索表单。以下是相关的代码片段: -

表格

<%=simple_form_for @user, :url => search_user_path(@user), :input_html => {:method => :post} do |f|%>
  <div id="top" style="width:979px; height:30px;">
    <%= select "search", :area_id, Area.find(:all).collect { |p| [p.name, p.id]}, {:selected => current_user.address.area}  %>
    <%= f.association :categories, :as => :check_boxes, :label => false%>
    <%= f.submit "Submit"%>
  </div>
<% end %>

我希望这可以发布给用户/:id / search

的routes.rb

resources :users do    
  member do
    post 'search'
  end
end

rake routes | grep搜索

search_user POST   /users/:id/search(.:format)  {:action=>"search", :controller=>"users"}

所以路线存在

用户控制器具有以下方法

def search
  Rails.logger.debug('In users#search')
end

当我点击提交时,我收到路由错误

Started POST "/users/9/search" for 127.0.0.1 at 2011-10-28 14:11:04 +0530

ActionController::RoutingError (No route matches "/users/9/search"):

我对此毫无头绪,在经过大量浪费的研究后,我正在向社区寻求投入。任何指针都将非常感激。感谢。

仅供参考我在rails 3.0.9和ruby 1.9.2

-Tarun

1 个答案:

答案 0 :(得分:1)

你需要用复数形式写这个:

search_users_path(@user)

此外,您的表格有点受欢迎。你可以简单地写一下

<%= form_for @user, search_users_path(@user) do |f| %>

而不是

<%=simple_form_for @user, :url => search_user_path(@user), :input_html => {:method => :post} do |f|%>

您不需要:method => :post