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