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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

検索

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

Q&A

解決済

1回答

847閲覧

【Rails】検索機能の実装について

yastinbieber

総合スコア49

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

検索

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

0グッド

0クリップ

投稿2020/04/03 14:54

Railsの検索機能についてわからない点がございます。
現在Railsにて書籍のレビューアプリを作っており、検索機能も実装しております。

現状だと検索ページに遷移すると登録のある書籍が全て反映する状態であり、そこから検索をして絞っていくような形です。

しかし見栄え的にあまり良くないので、
検索をかけるまでは何も書籍が反映しない状況にしたいと考えております。

■現状
https://gyazo.com/1e31eaa9441c97d30e05f1b2709f3c7e

■理想
https://gyazo.com/893c489a3b68eca7eaa0d6efcb6eac5a

Rails

1 2##products_controller 3class ProductsController < ApplicationController 4 before_action :authenticate_user! 5 6 def index 7 @products = Product.includes(:user).page(params[:page]).per(5).order("created_at DESC") 8 end 9 10 def new 11 @product = Product.new 12 end 13 14 def create 15 @products = Product.create(bookname: product_params[:bookname], author: product_params[:author], image: product_params[:image], user_id: current_user.id) 16 end 17 18 def show 19 @product = Product.find(params[:id]) 20 @review = @product.reviews.all.count 21 @products = Product.page(params[:id]).per(10).order("created_at DESC") 22 @reviews = Review.order("created_at ASC").page(params[:page]).per(5) 23 end 24 25 def search 26 @products = Product.where('bookname LIKE(?)', "%#{params[:keyword]}%") 27 end 28 29 private 30 def product_params 31 params.require(:product).permit(:bookname, :author, :image) 32 end 33 34end 35

rails

1 2##products_search.html.erb 3<div class="contents-box"> 4 <div class="container-left"> 5 <div class="container-search-box"> 6 <h3>書籍を検索する</h3> 7 <%= form_tag('/products/search', method: :get) do %> 8 <input id="sbox" name="keyword" type="text" placeholder="キーワードを入力" /> 9 <input id="sbtn" type="submit" value="検索" /> 10 <% end %> 11 <form accept-charset="utf-8" action="/" class="js-search-submit" method="get"> 12 </form> 13 </div> 14 <div class="container-search-result"> 15 <h3>検索一覧</h3> 16 <div class="no-search"> 17 <p>検索でレビューを書きたい書籍が見つからなかった場合はまず書籍をご登録ください</p> 18 <a class="right-btn" href="/products/new">書籍を登録する</a> 19 </div> 20 <br> 21 <% @products.each do |product| %> 22 <a class="container-search-result-box" href="/products/<%= product.id %>" title="<%= product.bookname %>"> 23 <div class="container-search-result-box-left" > 24 <% if product.image.attached? %> 25 <%= image_tag product.image %> 26 <% end %> 27 </div> 28 <div class="container-search-result-box-right"> 29 <h2><%= product.bookname %></h2> 30 <%= product.author %> 31 </div> 32 </a> 33 <% end %> 34 </div> 35 </div> 36 <div class="container-right"> 37 <%= link_to "書籍を検索する", "/products/search", class: "right-btn" %> 38 <%= link_to "マイページ", user_path(current_user), class: "right-btn" %> 39 <a class="right-btn" href=""></a> 40 </div> 41</div>

rails

1##product.rb 2class Product < ApplicationRecord 3 4 has_one_attached :image 5 6 has_many :reviews 7 belongs_to :user 8 has_many :comments 9 10end 11

どなたかご教示いただけますと幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1def search 2 @products = params[:keyword].present? ? Product.where('bookname LIKE(?)', "%#{params[:keyword]}%") : [] 3end

とすると、キーワードが空の時に全データが引っかかるってことはなくなります。

また空の時に <% @products.each do |product| %>~<% end %>は@productsがからのとき不要なので、if文で空のときはEachしないとかするといいかもしれないです。

投稿2020/04/03 16:21

hatsu

総合スコア1809

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

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

yastinbieber

2020/04/04 02:37

ご回答ありがとうございました! 無事希望通りの実装ができました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問