sql >> Databasteknik >  >> RDS >> PostgreSQL

Skicka en rad värden till en sql-fråga i ruby?

PostgreSQL stöder standard SQL-arrayer och standarden alla op (. ..) syntax:

Det betyder att du kan bygga SQL så här:

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

Det är trevligt och kortfattat, så hur får vi Rails att bygga detta? Det är faktiskt ganska enkelt:

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

Ingen manuell citering behövs, ActiveRecord kommer att konvertera arrayen till en korrekt citerad/escaped lista när den fyller ? platshållare i.

Nu behöver du bara bygga namnen array. Något enkelt som det här borde göra:

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

Du kan också konvertera enstaka 'a b' inmatningar i 'a', 'b' genom att kasta en split och platta ut i mixen:

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


  1. Anslut till OpenShift (Redhat Paas) mysql-instans

  2. Django - Lägg till rader i MySQL-databasen

  3. Håll koll på databasprestanda med Uptime Infrastructure Monitor

  4. MySQL group_concat_max_len i en fråga