PostgreSQL ondersteunt standaard SQL-arrays en de standaard any op (...)
syntaxis:
Dat betekent dat je SQL als volgt kunt bouwen:
where name ilike any (array['%Richard%', '%Feynman%'])
Dat is mooi en beknopt, dus hoe krijgen we Rails zover om dit te bouwen? Dat is eigenlijk vrij eenvoudig:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
Handmatig citeren is niet nodig, ActiveRecord converteert de array naar een correct geciteerde/escaped lijst wanneer deze de ?
vult tijdelijke aanduiding in.
Nu hoef je alleen nog maar de names
te maken reeks. Iets eenvoudigs als dit zou moeten doen:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
Je zou ook enkele 'a b'
. kunnen converteren invoer in 'a', 'b'
door een split
. te gooien en flatten
in de mix:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten