PostgreSQL understøtter standard SQL-arrays og standarden any op (...)
syntaks:
Det betyder, at du kan bygge SQL sådan her:
where name ilike any (array['%Richard%', '%Feynman%'])
Det er fint og kortfattet, så hvordan får vi Rails til at bygge dette? Det er faktisk ret nemt:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
Ingen manuel citering nødvendig, ActiveRecord vil konvertere arrayet til en korrekt citeret/escaped liste, når den udfylder ? pladsholder i.
Nu skal du bare bygge names array. Noget simpelt som dette burde gøre:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
Du kan også konvertere enkelt 'a b' input til 'a', 'b' ved at kaste en split og flatten i blandingen:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten