Rails / DBのカラムを結合した文字列で検索する

Railsというか、PostgreSQLだよねこれは。
ファーストネームとラストネームというカラムがあって、その両方を合わせた状態で検索したことはたまにある。

なぜなら

User.where('first_name is like ?', "%#{name}%")

こういう感じだと

Shunsuke はヒットしても Sawada Shunsukeにはヒットしないから。
当たり前だけど。

  
こんな感じでいけた。


keyword = "%#{keyword.downcase}%"
User.where("lower(users.first_name) like ? OR lower(users.last_name) like ? OR concat_ws(' ', lower(first_name), lower(last_name)) like ?", keyword, keyword, keyword)

concat_ws とっても便利。
以上!

参考

PostgreSQL: Documentation: 9.5: Aggregate Functions

mysql - Rails where fields concatenated like search query - Stack Overflow

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた