PostgreSQL podporuje standardní pole SQL a standardní any op (...)
syntaxe:
To znamená, že můžete sestavit SQL takto:
where name ilike any (array['%Richard%', '%Feynman%'])
To je hezké a stručné, takže jak přimět Rails, aby to postavili? To je vlastně docela snadné:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
Není potřeba ruční citování, ActiveRecord převede pole na správně citovaný/escaped seznam, když vyplní ?
zástupný symbol v.
Nyní stačí vytvořit names
pole. Něco takového by mělo stačit:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
Můžete také převést jeden 'a b'
vstupy do 'a', 'b'
hozením split
a flatten
do mixu:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten