対応する URL (ルート) を介して検索を実装しました: /:category_id/:id
(コントローラー アクション コードで ID ではなく「名前」を期待するだけです)
たとえば
/category_name/search_pattern_for_item_name
、「category_name」という名前のカテゴリ内で、「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 アクションに対応するビューにこれを入れないと、エラーが発生します。そして、後者の(成功した)場合でも、送信時に(「それ」を検索するときに)期待したものではなく、URLを取得します。http://localhost:3000/category1/item12?utf8=%E2%9C%93&id=it&category_id=category1&commit=Filter
期待したけどhttp://localhost:3000/category1/it
私の場合に正しいフォームを実装する方法、または何が間違っていましたか?
私のroutes.rb:
resources :categories, path: '', only: [:index] do
resources :items, path: '', only: [:index, :show]
end