1. is-lab

    Posted

    is-lab
Changes in title
+Rails で検索ボックスに入れるLIKE検索のScope
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,42 @@
+
+###筆者環境
+MacOSX 10.9.2
+端末:MacBookPro
+Homebrew 0.9.5
+Ruby 2.1.0
+Rails 4.0.3
+
+
+普段、solorの全文検索を使っていますが、スコープを書いてみたので、活用してみてください。
+
+## 検索条件
+
+1.前後トリムしたい。
+  例:「 テスト 」 => 「テスト」
+2.スペースで値をor検索したい。
+  例:「鈴木 イチロー」 => 「鈴木とイチローを検索条件にしたい。」
+
+```Terminalコマンド
+ 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
+ }
+```
+
+```Terminalコマンド
+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の完成!
+
+全角スペースで繋げた場合の対策はしていないので、詳しい解説とか希望あれば書きます。
+