現在簡単なフリマ系のwebサービスを作っているのですが、検索フォームで詰まっている部分があります。
まだ、初心者なため、平凡なミスかもしれませんが、ご教授お願い致します。
開発環境
・AWS cloud9
バージョン
・ruby 2.6.0
・RUby on Rails 5.0.7
データベース
・mySQL
検索フォームに入力しても、Urlが正しく反映されず、ページが移動しません
検索フォームと、検索結果のページを作ったのですが、ページが移動せず、困っています。
検索フォームに文字を入力して、検索ボタンを押すと、そのページから動きません。
私なりに原因を考えたところ、ulrが想定していたのと違う挙動になっていたのを発見しました。
ルートで
Rails.application.routes.draw do root to: "toppages#index" get "search",to: "items#search" end
としているので、urlに
/search
と入力すれば、検索結果のページにいきます。
しかし、検索結果に入力すると
/search
は表示されません。
例として、検索フォームに「iphone」を入力します。
そうすると、urlは
/?utf8=✓&search=iphone
となり、 想定していた、
/search/?utf8=✓&search=iphone
とならないので、ページが移動しません。
私がどのようなところを間違えているのか、教えていただけたら幸いです。
###該当するコードは以下のようにしています。
itemsテーブルは、
カラムに id , name , price , text を作っています。
今回はnameを曖昧検索しようと考えています。
navbarにフォームを設置しています。
navbarはパーシャルで、application.html.erbに読み込んでいます。
_navbar.html.erb
<%= form_tag(search_path,:method => 'get') do %> <%= text_field_tag :search,params[:search] %> <%= submit_tag "search",:name => nil %> <% end %>
itemコントローラーにsearchアクションを作っています。
items_controller.rb
class ItemsController < ApplicationController def search @items=Item.search(params[:search]) end end
またモデルで以下のように設定しています。
item.rb
class Item < ApplicationRecord def self.search(search) if search Item.where(["name LIKE ?","%#{search}%"]) else Item.all end end end
あとはsearch.html.erbのviewで@items表示しています。
初めて、terateilで質面させていただきます。
大変読みにくと思うですが、どうかよろしくお願い致します。
あなたの回答
tips
プレビュー