PostgreSQL supporta gli array SQL standard e lo standard any op (...)
sintassi:
Ciò significa che puoi creare SQL in questo modo:
where name ilike any (array['%Richard%', '%Feynman%'])
È carino e conciso, quindi come possiamo convincere Rails a costruirlo? In realtà è abbastanza facile:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
Non sono necessarie citazioni manuali, ActiveRecord converte l'array in un elenco con virgolette/escape corretto quando riempie il ?
segnaposto dentro.
Ora non ti resta che creare i names
Vettore. Qualcosa di semplice come questo dovrebbe fare:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
Puoi anche convertire un singolo 'a b'
immissioni in 'a', 'b'
lanciando una split
e flatten
nel mix:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten