1. is-lab

    No comment

    is-lab
Changes in body
Source | HTML | Preview

筆者環境

MacOSX 10.9.2
端末:MacBookPro
Homebrew 0.9.5
Ruby 2.1.0
Rails 4.0.3

普段、solorの全文検索を使っていますが、スコープを書いてみたので、活用してみてください。

検索条件

1.前後トリムしたい。
  例:「 テスト 」 => 「テスト」
2.スペースで値をor検索したい。
  例:「鈴木 イチロー」 => 「鈴木とイチローを検索条件にしたい。」

  scope :searchstring, ->(search_string){
    tokens = search_string.split(' ').map { |c| "%#{c.downcase}%" }
    if tokens.present?
      users = users.where((['( name like ? )']*tokens.size).join(' AND '),
                          *tokens.map { |token| [token] * 1 }.flatten)
    end
    users
  }
User. searchstring("鈴木 イチロー").to_sql
=> 
SELECT `users`.* FROM `users ` WHERE `users `.`deleted_at` IS NULL AND (( name like '%鈴木%' ) AND ( name like '%イチロー%' ))
User. searchstring("鈴 イチロー 木").to_sql
=>
SELECT `users`.* FROM `users ` WHERE `users `.`deleted_at` IS NULL AND (( name like '%鈴%' ) AND ( name like '%イチロー%' ) AND ( name like '%木%' ))

のように半角スペースで繋げた分だけLIKE検索が出来るscopeの完成!

全角スペースで繋げた場合の対策はしていないので、詳しい解説とか希望あれば書きます。