PostgreSQLは、標準のSQL配列と標準の any op (...)
構文:
つまり、次のようにSQLを構築できます。
where name ilike any (array['%Richard%', '%Feynman%'])
それは素晴らしく簡潔ですが、Railsにこれを構築させるにはどうすればよいでしょうか。それは実際には非常に簡単です:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
手動で引用する必要はありません。ActiveRecordは、?
がいっぱいになると、配列を適切に引用/エスケープされたリストに変換します。 のプレースホルダー。
これで、names
を作成する必要があります 配列。このような単純なことを行う必要があります:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
単一の'a b'
を変換することもできます 'a', 'b'
への入力 split
を投げることによって およびflatten
ミックスに:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten