PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

rails dynamic where sql заявка

Подходът ви е малко неправилен, тъй като се опитвате да разрешите грешния проблем. Опитвате се да изградите низ, който да предадете на ActiveRecord, така че той да може да изгради заявка, когато вие просто трябва да се опитвате да изградите заявка.

Когато кажете нещо като:

Model.where('a and b')

това е същото като да кажете:

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

и можете да кажете:

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

вместо:

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

Комбинирането на тези две идеи с вашите self.instance_values можете да получите нещо като:

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

или дори:

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

Те предполагат, че правилно сте поставили в белия списък всичките си променливи на екземпляра. Ако не сте, тогава трябва.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. заявка за актуализиране с присъединяване към две таблици

  2. Как да използвам ilike sqlalchemy в полето на масив postgresql?

  3. Използване на Barman за PostgreSQL Disaster Recovery

  4. Как да изхвърлите PGresult за команди, които не са SELECT

  5. Защо \dt на PostgreSQL показва само публични таблици със схеми?