Rails / DBのカラムを結合した文字列で検索する
Railsというか、PostgreSQLだよねこれは。
ファーストネームとラストネームというカラムがあって、その両方を合わせた状態で検索したことはたまにある。
なぜなら
ruby
1
User.where('first_name is like ?', "%#{name}%")
こういう感じだと
Shunsuke はヒットしても Sawada Shunsukeにはヒットしないから。
当たり前だけど。
こんな感じでいけた。
ruby
1
2
3
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