sql >> Database teknologi >  >> RDS >> PostgreSQL

Sender du en række værdier til en sql-forespørgsel i ruby?

PostgreSQL understøtter standard SQL-arrays og standarden any op (...) syntaks:

Det betyder, at du kan bygge SQL sådan her:

where name ilike any (array['%Richard%', '%Feynman%'])

Det er fint og kortfattet, så hvordan får vi Rails til at bygge dette? Det er faktisk ret nemt:

Model.where('name ilike any (array[?])', names.map { |s| "%#{s}%" })

Ingen manuel citering nødvendig, ActiveRecord vil konvertere arrayet til en korrekt citeret/escaped liste, når den udfylder ? pladsholder i.

Nu skal du bare bygge names array. Noget simpelt som dette burde gøre:

fields = params.keys.select { |k| k.to_s =~ /\Afield\d+\z/ }
names  = params.values_at(*fields).select(&:present)

Du kan også konvertere enkelt 'a b' input til 'a', 'b' ved at kaste en split og flatten i blandingen:

names = params.values_at(*fields)
              .select(&:present)
              .map(&:split)
              .flatten


  1. 11 funktioner til at få dagen, måneden og året fra en dato i MariaDB

  2. Hvordan finder man forskelle s/h TIMESTAMP-formatværdier i Oracle?

  3. MySQL ydeevne af unikt varchar felt vs unikt bigint

  4. Opdater sætning ved hjælp af et WHERE-udtryk, der indeholder kolonner med null-værdier