はじめに
個人アプリの開発でこのような動画のタイトルで検索出来る機能を実装をしたのでその方法について説明します。
環境
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
メソッドを使用して実装出来ました。
複雑な検索機能に関しては以下が参考になるかと思います。