ブログ

読んで思い出す。忘れるために書く

gem を使わずにRails で LIKE OR 検索

ネタ。こういうコードを書き始める前に ransack gem の使い方を学習したほうがいいのかもしれない

ビュー:

/ views/articles/index.html.slim
= form_tag 'articles/search'
  = text_field_tag :q, 'Lorem Ipsum'
  = submit_tag 'Search'

コントローラ:

class ArticlesController < ApplicationController
  before_action :set_article, only: [:show, :edit, :update, :destroy]

  def search
    words = params[:q].split # スペース区切りでの複数単語入力を期待

    @articles =
      Article.where(
        words.size.times.map { 'body LIKE ?' }.join(' OR '), # 単語の数だけ検索条件を量産
        *words.map { |word| "%#{word}%" } # 各単語を曖昧検索可能な文字列に加工し引数として展開
      )
  end
# ...
end