sql >> Databáze >  >> RDS >> PostgreSQL

Odeslání pole hodnot na dotaz SQL v ruby?

PostgreSQL podporuje standardní pole SQL a standardní any op (...) syntaxe:

To znamená, že můžete sestavit SQL takto:

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

To je hezké a stručné, takže jak přimět Rails, aby to postavili? To je vlastně docela snadné:

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

Není potřeba ruční citování, ActiveRecord převede pole na správně citovaný/escaped seznam, když vyplní ? zástupný symbol v.

Nyní stačí vytvořit names pole. Něco takového by mělo stačit:

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

Můžete také převést jeden 'a b' vstupy do 'a', 'b' hozením split a flatten do mixu:

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


  1. jak vypsat sloupec v mysql na nodejs s modulem mysql

  2. Jak změnit sloupec z NULL na NOT NULL

  3. Existuje způsob, jak nainstalovat javu na Oracle 11g XE?

  4. Jak zajistit, aby sloupec zobrazení NENÍ NULL