LoginSignup
0
0

More than 3 years have passed since last update.

検索機能実装ができる Rails 全3回(1/3)

Last updated at Posted at 2019-11-16

この記事では、Rails 5.2.3を使用した内容となっています。
WEBアプリを作成する上で必須となる機能なので、活用しましょう!
全3回にわけて記載しています。 これは、1/3ページです。

下記のリンク先が検索フォームに関する全3回のページです。
検索機能実装ができる 2 / 3ページ
検索機能実装ができる 3 / 3ページ

概要

・検索フォームを作成する。(view)
・ルーティングの設定
・検索メソッドをモデルに定義
・WhereメソッドとLIKE句

Viewファイルの検索フォーム

index.html.erb
<%= 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)

config/routes.rb
resources :tweets do
    resources :comments, only: :create
    collection do
      get 'search'
    end
  end

URL Patternに:idをつけない方法   /tweets/search(.:format)

config/routes.rb
resources :tweets do
    resources :comments, only: :create
    member do
      get 'search'
    end
  end

検索メソッドをモデルに定義

モデルにテーブルから検索するためのメソッドsearchを定義しましょう。
MVCの観点で検索するなどのビジネスロジック(プログラムの処理の流れ)は、メソッドとしてモデルにまとめて定義するようにします。
メソッドを別の場所でも使うことができるようになります。
Railsアプリケーションの流れ.png
そして、検索したキーワードが含まれている投稿を取得するために、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文字のタイトル
モデルにメソッドを定義する
models/tweet.rb
class Tweet < ApplicationRecord
 def self.search(search)
    if search
      Tweet.where('text LIKE(?)', "%#{search}%")
    else
      Tweet.all
    end
  end

テーブルとのやりとりに関するメソッドはモデルに置くという感覚が必要になるので、徐々に慣れていきましょう。

                           → 2 / 3ページに続く

0
0
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
0