如何使表单生成'/:category_id /:id',其中:category_id和:id应该在表单中输入

时间:2012-09-27 06:48:58

标签: ruby-on-rails forms

我已经通过通讯网址(路线)实施了搜索:/:category_id/:id(我只希望不是ID,而是我的控制器动作代码中的“名称”)

E.g。 /category_name/search_pattern_for_item_name 将使用“category_name”名称在catagory中查找名称类似于“search_pattern_for_item_name”的项目。

现在我想创建一个表单并将其绑定到此路由,即在提交时我想重定向到上面提到的路由...

我知道如何只写这个:

<%= form_tag({ :controller => "items", :action => "show" }, :method => "get") do %>
  <%= text_field_tag :id %>
  <%= hidden_field_tag :category_id, @category.name  %>
  <%= submit_tag "Filter" %>
<% end %>

但是这会导致No route matches {:controller=>"items"}错误,除非我将其放入与ItemsController#show action相对应的视图中。即使在后一个(成功的)案例中,我也会在提交时(在搜索“它”时)得到的URL不是我所期望的:http://localhost:3000/category1/item12?utf8=%E2%9C%93&id=it&category_id=category1&commit=Filter

虽然我期待http://localhost:3000/category1/it

如何为我的案例实施正确的表格或我做错了什么?

my routes.rb:

  resources :categories, path: '', only: [:index] do
    resources :items, path: '', only: [:index, :show]
  end

1 个答案:

答案 0 :(得分:0)

<%= form_tag({ :controller => "items", :action => "show", 
        :id =>params[:id], :category_id =>params[:category_id] }, 
        :method => "get") do %>