質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

0回答

775閲覧

ransackで検索結果を一覧ページにして表示する方法

firstlight

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/08/10 08:45

前提・実現したいこと

「前提」
Ruby-on-railsで食べログのようなグルメサイトを作成しております。
具体的にはRansackを使って「エリア」「ジャンル」「店の特徴」などを指定して検索する機能を実装中です。

「実現したいこと」
検索欄で「エリア」や「ジャンル」を指定したら関連する店を一覧にして表示させたいです。
食べログで言うと下記画像のような感じです。
https://gyazo.com/c1490971949ad943ad38018e670786a9
https://gyazo.com/e72018b830bbc1b8313b1d1a3338b672

発生している問題・エラーメッセージ

restaurants.index.erbに記載してる検索フォームで検索ボタンを押したら、
restaurantコントローラーのsearchアクション→search.html.erbが表示されるはずなのに
show.html.erbが表示されてしまいます。

エラーメッセージ

該当のソースコード

restaurants.index.erb↓

<h2 class="search-title"> エリアから探す </h2> <%= search_form_for @r, url: restaurants_search_path do |f| %> <%= f.label :area_eq, '場所で探す'%> <%= f.collection_select :area_eq, @restaurant_area, :area, :area, include_blank: '指定なし' %> <br> <%= f.submit '検索' %> <% end %> </div>

ルーティング↓

Rails.application.routes.draw do devise_for :users # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html root "restaurants#index" resources :restaurants get 'restaurants/search' end

restaurantsコントローラー↓

class RestaurantsController < ApplicationController before_action :search_restaurant, only: [:index, :search] def index @restaurants = Restaurant.all set_product_column end def new @restaurant = Restaurant.new end def create @restaurant = Restaurant.new(restaurant_params) @restaurant.save end def show end def search @results = @r.result @area_results = @r.area_result @genre_results = @r.genre_result @scene_results = @r.scene_result @feature_results = @r.feature_result end private def restaurant_params params.require(:restaurant).permit(:name, :name_alias, :tel, :about, :prefecture, :city_address, :building_name, :map, :reserve_id, :transportation, :hours, :holiday, :budget_dinner_id, :budget_lunch_id, :seats_number, :seats_number_explain, :private_room_id, :private_room_explain, :charter_id, :smoking_id, :drink_id, :food_id, :homepage, :area, :genre, scene: [], feature: []) end def search_restaurant @r = Restaurant.ransack(params[:q]) end def set_product_column @restaurant_area = Restaurant.select("area").distinct @restaurant_genre = Restaurant.select("genre").distinct @restaurant_scene = Restaurant.select("scene").distinct @restaurant_feature = Restaurant.select("feature").distinct end end

search.html.erb↓

<div class="search-result"> <div class="search-result-main"> <h2 class="search-keyward"> 検索結果 </h2> <% if @results.length !=0 %> <% @results.each do |result|%> <td> <br> <li class="search-restaurant"> <div class="title"> <%= link_to 'result.name', "#"%> </div> <div class="content"> <%= result.about %> <%= link_to "口コミ", "#" %> </div> <div class="reservation"> </div> </li> <% end %> <% else %> 該当する商品はありません <% end %> <% if @genre_results.length !=0 %> <% @genre_results.each do |genre_result|%> <td> <br> <li class="search-restaurant"> <div class="title"> <%= link_to 'genre_result.name', "#"%> </div> <div class="content"> <%= genre_result.about %> <%= link_to "口コミ", "#" %> </div> <div class="reservation"> </div> </li> <% end %> <% end %> <% if @scene_results.length !=0 %> <% @scene_results.each do |scene_result|%> <td> <br> <li class="search-restaurant"> <div class="title"> <%= link_to 'scene_result.name', "#"%> </div> <div class="content"> <%= scene_result.about %> <%= link_to "口コミ", "#" %> </div> <div class="reservation"> </div> </li> <% end %> <% end %> <% if @feature_results.length !=0 %> <% @feature_results.each do |feature_result|%> <td> <br> <li class="search-restaurant"> <div class="title"> <%= link_to 'feature_result.name', "#"%> </div> <div class="content"> <%= feature_result.about %> <%= link_to "口コミ", "#" %> </div> <div class="reservation"> </div> </li> <% end %> <% end %> </div> <footer class="search-result-footer"> <ul class="menu"> <li><a href="#">プライバシーポリシー</a></li> <li><a href="#">グルメ利用規約</a></li> <li><a href="#">特定商取引に関する表記</a></li> </ul> </footer> </div>

show.html.erb↓

<div class="restaurant-about"> <header> </header> <div class="restaurant-about-main"> <div class="restaurant-about-title"> <p>店の名前</p> <p>ジャンル</p> <p>予算</p> <p>定休日</p> </div> <div class="restaurant-about-content"> <img> <p>店</p> <ul class="restaurant-informations"> <li class="restaurant-feature"> </li> <li class="restaurant-course"> </li> <li class="restaurant-image"> </li> <li class="restaurant-review"> </li> </ul> <div class="restaurant-details"> </div> </div> </div> <footer> </footer> </div>

試したこと

searchアクションに「redirect_to restaurants_search_path」を記載して
強制的にsearch.html.erbに飛ばそうとしたけどshow.html.erbが表示されてしまいます。

補足情報(FW/ツールのバージョンなど)

環境のバージョンは
ruby '2.6.5'
gem 'rails', '~> 6.0.0'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問