2016-04-06 11 views
1

Ich versuche, eine LIKE Abfrage in meiner SQLite in Entwicklung und PostgreSQL in der Produktion (Heroku) zu machen, ohne eine If-else-Anweisung für beide Umgebungen. If-else-Anweisung scheint keine praktikable Option zu sein.LIKE Abfrage kompatibel mit SQLite und PostgreSQL

Meine Antwort jetzt wurde hier die Lösung bereitgestellt beruhte: Generic Ruby solution for SQLite3 "LIKE" or PostgreSQL "ILIKE"?

Dies ist, was mein Kursmodell wie folgt aussieht:

class Course < ApplicationRecord 
    has_many :enrollments 
    has_many :users, through: :enrollments 

    has_many :course_subjects 
    has_many :subjects, through: :course_subjects 

    def self.search(search) 
    where("lower(name) LIKE lower(?)", "%#{search}%") 
    end 
end 

Wie kann ich meine LIKE Abfrage-Struktur mit sowohl SQLite kompatibel zu sein und PostgreSQL?

Antwort

0

Arel zu verwenden ist eine einfache Lösung für dieses Problem:

def self.search(search) 
    Course.where(Course.arel_table[:name].matches("%#{search}%")) 
end 
1

Wenn ich etwas vorschlagen kann, wäre es ratsam, die gleichen DBs in allen Umgebungen zu haben, damit Sie später Postgresql-SQL-Teile in Ihrem Code haben (für Optimierungszwecke und dergleichen).

+0

ich auch zweites dies würde. Die Verwendung verschiedener DBs in verschiedenen Umgebungen ist keine gute Übung. –