PostgreSQL unterstützt standardmäßige SQL-Arrays und den standardmäßigen any op (...)
Syntax:
Das bedeutet, dass Sie SQL wie folgt erstellen können:
where name ilike any (array['%Richard%', '%Feynman%'])
Das ist schön und prägnant, also wie bringen wir Rails dazu, das zu bauen? Das ist eigentlich ganz einfach:
Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })
Keine manuellen Anführungszeichen erforderlich, ActiveRecord konvertiert das Array in eine Liste mit korrekten Anführungszeichen/Escapezeichen, wenn es den ?
füllt Platzhalter in.
Jetzt müssen Sie nur noch die names
erstellen Reihe. Etwas Einfaches wie dieses sollte reichen:
fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names = params.values_at(*fields).select(&:present)
Sie können auch einzelne 'a b'
umwandeln Eingaben in 'a', 'b'
indem Sie einen split
werfen und flatten
in die Mischung:
names = params.values_at(*fields)
.select(&:present)
.map(&:split)
.flatten