sql >> データベース >  >> RDS >> PostgreSQL

値の配列をrubyのSQLクエリに送信しますか?

    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
    


    1. MySQL接続が機能しない

    2. MySQL-日付に基づいて参加

    3. java.sql.SQLRecoverableException:ネットワークアダプタが接続を確立できませんでした

    4. 繰り返さずにレコードを1つずつ選択する方法