我收到以下错误:
No route matches {:action=>"search", :controller=>"items", :id=>nil}, missing required keys: [:id]
从这条路线:
resources :items do
member do
get :search
end
end
这是我在视图中的形式:
<%= form_tag search_item_path, method: :get do %>
<%= text_field_tag :term, params[:term], placeholder: 'Enter keyword' %>
<%= submit_tag 'Search', name: nil %>
<% end %>
答案 0 :(得分:2)
使用search_item_path
时没有id
参数。
路径是在成员上定义的。在路由上下文中,成员将表示单个资源而不是资源集合。个人成员通常通过他们的id引用。因此,您的表单应如下所示:
<%= form_tag search_item_path([SOME ID YOU HAVE TO PROVIDE]), method: :get do %>
<%= text_field_tag :term, params[:term], placeholder: 'Enter keyword' %>
<%= submit_tag 'Search', name: nil %>
<% end %>
OP评论后更新
我现在相信表格毕竟不是你的问题,而是路线。如果你想根据一些术语搜索项目,那么应该像这样设置路线:
resources :items do
collection do
get :search
end
end
请注意,与问题中显示的路线相比,我将member
更改为collection
。然后,您应该可以使用您的表单,而不是问题中显示的内容(无需ID)。
您还可能希望重用已由资源定义设置的索引操作。过滤索引操作非常常见。
您可以look at the guide进一步参考。
答案 1 :(得分:1)
如果您有@item
个对象,请使用:
<%= form_tag search_item_path(@item), method: :get do %>
<%= text_field_tag :term, params[:term], placeholder: 'Enter keyword' %>
<%= submit_tag 'Search', name: nil %>
<% end %>
或:
<%= form_tag search_item_path(id: @item.id), method: :get do %>
<%= text_field_tag :term, params[:term], placeholder: 'Enter keyword' %>
<%= submit_tag 'Search', name: nil %>
<% end %>
您似乎无法通过搜索查询。为什么在成员中包含搜索路径?
尝试把它拿出来:
resources :items
get '/items/search', to: "items#search"