すでに有名な方法だけどひっかかる点があったので備忘録的に。
たとえばデータベースでApple
という文字列があったとして、検索フォームにapple
といれてもヒットしないのはいかにも不便だろう。方法はいろいろあるが、一番手っ取り早いのはarel_table
を使う方法になるし、これは結構たくさん見つかる。
通常は
if request.post? then
f = '%' + params[:find] + '%'
@user = User.where"name like ?",f
end
という感じで、whereのあとにSQL文を書いて検索とする方法が一般的。
しかしこれだと上記のように大文字小文字の区別がつかなくて面倒臭いので
if request.post? then
f = '%' + params[:find] + '%'
user_table = User.arel_table
@user = User.where(user_table[:name].matches(f))
end
これでいいんだけど、問題は複数のカラムから検索したいときはどうしようか?ってことがある。これが検索しても案外見つからなかったのでかいておくと
if request.post? then
f = '%' + params[:find] + '%'
user_table = User.arel_table
@user = User.where((user_table[:name].matches(f)).or(user_table[:address].matches(f)))
end
という風に、.or()
で繋いでやると、複数のカラムからの検索が可能になる。そんだけー。