LoginSignup
0
3

More than 3 years have passed since last update.

[Rails]検索機能の実装

Last updated at Posted at 2019-09-30

はじめに

個人アプリの開発でこのような動画のタイトルで検索出来る機能を実装をしたのでその方法について説明します。
23f2fb50ef8888f5d38b40a5b7d85a00

環境

Rails 5.2.3
Ruby 2.5.1
Bootstrap3使用

導入方法

モデル内

投稿用のモデルやコントローラーの作成などの説明は省略します。

始めに投稿用のモデルに以下の記述を追加します。
self.searchでクラスメソッドを定義し、if文内ではWhere LIKEを使用し、あいまい検索をしています。
where LIKE分の中に検索したいカラム名(今回の場合はname)を記述します。

video.rb
 def self.search(search)
    if search
       where(['name LIKE ?', "%#{search}%"])
    else
       all
    end
 end

コントローラー内

次に投稿用のコントローラーにsearchメソッドを使用して、ビューに検索結果を表示させるように記述します。

videos_controller.rb
 def index
    @videos = Video.order("created_at DESC").page(params[:page]).per(5).search(params[:search])
 end

ビューファイル内

最後にビューファイルに検索フォームと検索ボタンを表示します。
form_withを使用して以下のように記述する事でビューに検索結果を表示させる事が出来るようになります。
注意点はsubmitの所の検索したいカラム名にカラム名:nilと記述するのを忘れないようにします。
ボタンはBootstrap3を使用してます。
後はCSSを調整したら上手くいくかと思います。

index.html.haml
.search
  = form_with url: videos_path, method: :get, local: true do |f|
    = f.text_field :search, class: "search-field", placeholder: "タイトルを入力して下さい。"
      = f.submit '検索', name: nil, class: "btn btn-default"

最後に

簡単な検索機能だとGem ransackなど必要なくsearchメソッドを使用して実装出来ました。
複雑な検索機能に関しては以下が参考になるかと思います。

参考資料

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3