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

szyny dynamiczne, gdzie zapytanie sql

Twoje podejście jest trochę nietrafione, ponieważ próbujesz rozwiązać niewłaściwy problem. Próbujesz zbudować ciąg do przekazania do ActiveRecord, aby mógł zbudować zapytanie, podczas gdy powinieneś po prostu próbować zbudować zapytanie.

Gdy powiesz coś takiego:

Model.where('a and b')

to to samo, co powiedzenie:

Model.where('a').where('b')

i możesz powiedzieć:

Model.where('c like ?', pattern)

zamiast:

Model.where("c like '#{pattern}'")

Łącząc te dwa pomysły ze swoimi self.instance_values możesz dostać coś takiego:

def query
  self.instance_values.select { |_, v| v.present? }.inject(YourModel) do |q, (name, value)|
    q.where("#{name} like ?", "%#{value}%")
  end
end

a nawet:

def query
  empties      = ->(_, v) { v.blank? }
  add_to_query = ->(q, (n, v)) { q.where("#{n} like ?", "%#{v}%") }
  instance_values.reject(&empties)
                 .inject(YourModel, &add_to_query)
end

Zakładają one, że poprawnie umieściłeś na białej liście wszystkie zmienne instancji. Jeśli nie, to powinieneś.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Atomic UPDATE .. SELECT w Postgres

  2. grupuj kolejne przedziały czasu w sql

  3. Przechowuj interwał czasowy w PostgreSQL od Rails

  4. Problemy z połączeniem SSL między kontenerem go Scratch a kontenerem PG. Jak rozwiązać?

  5. Nie można zaimportować do bazy postgres heroku ze zrzutu