PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Enviando array de valores para uma consulta sql em ruby?


O PostgreSQL suporta arrays SQL padrão e o padrão any op (...) sintaxe:

Isso significa que você pode construir SQL assim:
where name ilike any (array['%Richard%', '%Feynman%'])

Isso é bom e sucinto, então como fazemos para o Rails construir isso? Isso é realmente muito fácil:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })

Nenhuma citação manual é necessária, o ActiveRecord converterá o array em uma lista com aspas/escapados corretamente quando preencher o ? marcador de posição em.

Agora você só precisa construir os names variedade. Algo simples como isso deve fazer:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names  = params.values_at(*fields).select(&:present)

Você também pode converter um único 'a b' entradas em 'a', 'b' lançando um split e flatten na mistura:
names = params.values_at(*fields)
              .select(&:present)
              .map(&:split)
              .flatten