sql >> Database >  >> RDS >> PostgreSQL

rails dynamisch waar sql-query

Je aanpak is een beetje verkeerd omdat je het verkeerde probleem probeert op te lossen. U probeert een tekenreeks bij de hand te maken voor ActiveRecord, zodat het een query kan maken terwijl u gewoon zou moeten proberen een query te maken.

Als je iets zegt als:

Model.where('a and b')

dat is hetzelfde als zeggen:

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

en je kunt zeggen:

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

in plaats van:

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

Deze twee ideeën combineren met uw self.instance_values je zou zoiets kunnen krijgen als:

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

of zelfs:

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

Die gaan ervan uit dat u al uw instantievariabelen correct op de witte lijst hebt gezet. Als je dat niet hebt gedaan, zou je dat moeten doen.




  1. Gids voor het ontwerpen van een database voor quiz in MySQL

  2. SQL Server-vergrendelingen - andere vergrendelingen die u moet kennen

  3. verwijder de primaire sleutelrij die een externe sleutel is van een andere tabel

  4. MySQL – Codering en sortering van databasetekensets uitgelegd