PostgreSQL obsługuje standardowe tablice SQL i standardowe any op (...)
składnia:
Oznacza to, że możesz zbudować SQL w ten sposób:
where name ilike any (array['%Richard%', '%Feynman%'])
To jest ładne i zwięzłe, więc jak sprawić, by Railsy to zbudowały? To całkiem proste:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
Nie jest potrzebne ręczne cytowanie, ActiveRecord skonwertuje tablicę na listę prawidłowo cytowaną/unikniętą, gdy wypełni ?
symbol zastępczy w.
Teraz musisz tylko zbudować names
szyk. Coś takiego powinno wystarczyć:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
Możesz także przekonwertować pojedynczy 'a b'
wejścia do 'a', 'b'
rzucając split
i flatten
do miksu:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten