前提・実現したいこと
「前提」
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'
あなたの回答
tips
プレビュー