sql >> Database >  >> RDS >> PostgreSQL

Een array met waarden verzenden naar een sql-query in ruby?

PostgreSQL ondersteunt standaard SQL-arrays en de standaard any op (...) syntaxis:

Dat betekent dat je SQL als volgt kunt bouwen:

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

Dat is mooi en beknopt, dus hoe krijgen we Rails zover om dit te bouwen? Dat is eigenlijk vrij eenvoudig:

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

Handmatig citeren is niet nodig, ActiveRecord converteert de array naar een correct geciteerde/escaped lijst wanneer deze de ? vult tijdelijke aanduiding in.

Nu hoef je alleen nog maar de names te maken reeks. Iets eenvoudigs als dit zou moeten doen:

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

Je zou ook enkele 'a b' . kunnen converteren invoer in 'a', 'b' door een split . te gooien en flatten in de mix:

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


  1. Query's naar een database verzenden vanaf Android

  2. SQL Server 2016:Queryontwerper

  3. Haal de tweede match uit de resultaten van regexp_matches

  4. MySQL LEFT JOIN Meerdere voorwaarden