1. ホーム
  2. ruby-on-rails

[解決済み] ArelとRailsでLIKEクエリを実行するには?

2022-08-13 23:18:50

質問

のようなことをしたいのですが。

SELECT * FROM USER WHERE NAME LIKE '%Smith%';

Arelでの私の試み。

# params[:query] = 'Smith'
User.where("name like '%?%'", params[:query]).to_sql

しかし、これはなる。

SELECT * FROM USER WHERE NAME LIKE '%'Smith'%';

Arelはクエリ文字列'Smith'を正しくラップしますが、これはLIKE文であるため、うまくいきません。

ArelでLIKEクエリを行うにはどうしたらよいでしょうか?

P.S. ボーナス--私は実際にテーブル上の2つのフィールド、名前と説明の両方をスキャンして、クエリに一致するものがあるかどうかを確認しようとしています。それはどのように動作するのでしょうか?

どのように解決するのですか?

これは、arelでlike queryを実行する方法です。

users = User.arel_table
User.where(users[:name].matches("%#{user_name}%"))

PS:

users = User.arel_table
query_string = "%#{params[query]}%"
param_matches_string =  ->(param){ 
  users[param].matches(query_string) 
} 
User.where(param_matches_string.(:name)\
                       .or(param_matches_string.(:description)))