この記事では、Rails 5.2.3を使用した内容となっています。
WEBアプリを作成する上で必須となる機能なので、活用しましょう!
全3回にわけて記載しています。 これは、1/3ページです。
下記のリンク先が検索フォームに関する全3回のページです。
検索機能実装ができる 2 / 3ページ
[検索機能実装ができる 3 / 3ページ]
(https://qiita.com/NishiguchiHiroki/items/8163cbc36d95360e0f98)
#概要
・検索フォームを作成する。(view)
・ルーティングの設定
・検索メソッドをモデルに定義
・WhereメソッドとLIKE句
###Viewファイルの検索フォーム
<%= form_with(url: search_tweets_path, local: true, method: :get, class: "search-form") do |form| %>
<%= form.text_field :keyword, placeholder: "投稿を検索する", class: "search-input" %>
<%= form.submit "検索", class: "search-btn" %>
<% end %>
###ルーティングの設定
投稿機能があり、その投稿に対してコメントを作成できる状態で想定
URL Patternに:idをつける方法 /tweets/:id/search(.:format)
resources :tweets do
resources :comments, only: :create
collection do
get 'search'
end
end
URL Patternに:idをつけない方法 /tweets/search(.:format)
resources :tweets do
resources :comments, only: :create
member do
get 'search'
end
end
##検索メソッドをモデルに定義
モデルにテーブルから検索するためのメソッドsearchを定義しましょう。
MVCの観点で検索するなどのビジネスロジック(プログラムの処理の流れ)は、メソッドとしてモデルにまとめて定義するようにします。
メソッドを別の場所でも使うことができるようになります。
そして、検索したキーワードが含まれている投稿を取得するために、whereメソッドとLIKE句を使っていきます。
##WhereメソッドとLIKE句
モデル.where(条件)で引数部分に条件を指定することで
テーブル内の条件に一致したレコードのインスタンスを配列の形で取得できます。
LIKE句は、曖昧(あいまい)な文字列の検索をすることができ
whereメソッドと一緒に使います。
#####曖昧文字列
文字列 | 意味 |
---|---|
% | 任意の文字列(空白文字列含む) |
_ | 任意の1文字 |
#####実行サンプル
実行例 | 詳細 |
---|---|
where('title LIKE(?)', "a%") | aから始まるタイトル |
where('title LIKE(?)', "%b") | bで終わるタイトル |
where('title LIKE(?)', "%c%") | cが含まれるタイトル |
where('title LIKE(?)', "d_") | dで始まる2文字のタイトル |
where('title LIKE(?)', "_e") | eで終わる2文字のタイトル |
#####モデルにメソッドを定義する
class Tweet < ApplicationRecord
def self.search(search)
if search
Tweet.where('text LIKE(?)', "%#{search}%")
else
Tweet.all
end
end
テーブルとのやりとりに関するメソッドはモデルに置くという感覚が必要になるので、徐々に慣れていきましょう。