PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Array von Werten an eine SQL-Abfrage in Ruby senden?

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