我有一个需要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
答案 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