PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wysyłasz tablicę wartości do zapytania sql w ruby?

PostgreSQL obsługuje standardowe tablice SQL i standardowe any op (...) składnia:

Oznacza to, że możesz zbudować SQL w ten sposób:

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

To jest ładne i zwięzłe, więc jak sprawić, by Railsy to zbudowały? To całkiem proste:

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

Nie jest potrzebne ręczne cytowanie, ActiveRecord skonwertuje tablicę na listę prawidłowo cytowaną/unikniętą, gdy wypełni ? symbol zastępczy w.

Teraz musisz tylko zbudować names szyk. Coś takiego powinno wystarczyć:

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

Możesz także przekonwertować pojedynczy 'a b' wejścia do 'a', 'b' rzucając split i flatten do miksu:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. [Wideo] Integracja danych z PostgreSQL

  2. PostgreSQL 9.2 - Konwertuj TEKSTOWY ciąg json na typ json/hstore

  3. Czy w procedurze może istnieć postgres Commit, który ma blok wyjątków?

  4. Wartość domyślna w kolumnie po wstawieniu nowego wiersza

  5. Bardziej niezawodne zestawienia z obsługą ICU w PostgreSQL 10