前提・実現したいこと
ransackを使用してsearch.html.erb(検索結果)を表示させたいです
発生している問題・エラーメッセージ
検索ボタンを押すと、初期画面のindex.html.erbが表示されてしまいます
エラーメッセージ
### 該当のソースコード ソースコード ルーティング get "search", to: "posts#search" 検索フォーム <%= search_form_for @q, url: search_path do |f| %> <%= f.search_field :shopaddress_cont, class: 'form-control', placeholder: "住所を入れてください" %> <%= f.submit'検索',class: 'btn btn-success' %> <% end %> コントローラー before_action :set_q, only: [:index, :search] def search @results = @q.result end private def set_q @q = Post.ransack(params[:q]) end search.html.erb <tbody> <% @results.each do |searchresult| %> <div class = "searchresultbox"></div> <br><%= searchresult.shopname %></br> <br><%= searchresult.shopaddress %></br> <br><%= searchresult.shopcontent %></br> </div> <% end %> </tbody> ### 試したこと ransack、に関する記事の確認 ルーティングの確認 ### 補足情報(FW/ツールのバージョンなど) ruby '2.6.3' gem 'rails', '~> 5.2.5' gem 'mysql2', '>= 0.4.4', '< 0.6.0' ここにより詳細な情報を記載してください。
認識合わせをさせてください。
実現したい機能は、以下のような仕様で合っていますか?
【1】初期表示について
【1-1】初期表示のURLは /posts (indexアクション)である。
【1-2】その画面には検索フォームがある
【1-3】初期表示段階では、検索条件は空っぽ、検索結果0件。
【2】検索について
【2-1】検索条件を入力し、検索ボタンを押下すると、URLが /search に遷移する。
【2-2】検索フォームの検索条件は引き継がれる。
【2-3】検索結果が表示される。
認識が違う点があったら教えてください。
また、
「検索ボタンを押すと、初期画面のindex.html.erbが表示されてしまいます」
とのことですが、具体的にはどのような状態なのでしょうか?
言い換えると、【1-1】~【2-3】の中で実現できていない機能はどれですか?
URLが /posts のままなのか、
URLは /search になっているし、検索条件も保持されているけど、結果欄だけが空っぽなのか、
それ以外の状態なのか
ちなみに、binding.pry の使い方は知っていますか?
コントローラーの search アクションで binding.pry して、
・ちゃんと search アクションが呼びだされているか?
・@results に想定通りの件数のデータがあるか?
・params に想定通りのデータが入っているか?
などを調べれば、原因究明に近づくのではと思います。
ありがとうございます
認識は、合っています。
【2】を実行したタイミングで、index(初期画面)にrenderされている形です。
: 検索を実行した際の、ターミナルです
Parameters: {"utf8"=>"✓", "q"=>{"shopaddress_cont"=>"渋谷区"}, "commit"=>"検索"}
Rendering posts/index.html.erb within layouts/application
Post Load (0.3ms) SELECT `posts`.* FROM `posts`
↳ app/views/posts/index.html.erb:15
(0.2ms) SELECT COUNT(*) FROM `posts`
↳ app/views/posts/index.html.erb:25
Rendered posts/index.html.erb within layouts/application (6.8ms)
検索フォームの view をブラウザの開発者ツールで見た時、form タグの action に想定通りの URL が出力されていますか?
ご回答ありがとうございます。無事解決しました
htmlのフォームがrailsのフォームを挟んでいて、表面的には、値は入力されてますが、内部的には、railsのフォームには、からの値が入力されていた状態でした。助かりました
本当にありがとうございます
<form>
<% search_form_for %>
<% end %>
</form>
回答2件
あなたの回答
tips
プレビュー