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

rails dynamic where sql query

Váš přístup je trochu mimo, když se snažíte vyřešit špatný problém. Pokoušíte se vytvořit řetězec pro ActiveRecord, aby mohl vytvořit dotaz, když byste se měli jednoduše pokoušet sestavit dotaz.

Když řeknete něco jako:

Model.where('a and b')

to je stejné jako říct:

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

a můžete říct:

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

místo:

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

Zkombinujte tyto dva nápady s vašimi self.instance_values můžete získat něco jako:

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

nebo dokonce:

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

Ty předpokládají, že jste správně přidali všechny proměnné instance. Pokud ne, měli byste.




  1. Porovnání řešení selhání DBaaS s ručním nastavením obnovy

  2. Objednejte do CONCAT_WS

  3. Symfony/Doctrine:Jak zajistit, aby Doctrine fungovala s Unixovým socketem?

  4. Jak vložit hromadná data do databáze najednou?