重写SQL查询以使用heroku

tho*_*edb 2 mysql postgresql ruby-on-rails heroku

我将如何重写此rails查询以在Heroku(Portegres)上运行

@students = Student.find(:all, 
                  :conditions =>["(concat(first_name, ' ', last_name) LIKE ?) OR
                                  (concat(first_name, ' ', middle_names, ' ', last_name) LIKE ?)",
                                 "%#{params[:search]}%", "%#{params[:search]}%"]
                        )
Run Code Online (Sandbox Code Playgroud)

Jes*_*ott 5

也遇到了这个问题.Postgres与LIKE运算符区分大小写,所以这就是我在项目中所做的.另外,我不喜欢在本地运行postgres,所以我在开发中运行LIKE(mysql/sqlite)和生产中的ILIKE(postgres).ILIKE"不区分大小写"

/config/environment.rb

  DATABASE_OPERATOR = {
    :like_operator => "LIKE"
  }
Run Code Online (Sandbox Code Playgroud)

/config/environments/production.rb

  DATABASE_OPERATOR = {
    :like_operator => 'ILIKE' #postgres awfulness
  }
Run Code Online (Sandbox Code Playgroud)

询问

@students = Student.find(:all, :conditions => ['(concat(first_name, " ", last_name) #{DATABASE_OPERATOR[:like_operator]} ?) OR (concat(first_name, " ", middle_names, " ", last_name) #{DATABASE_OPERATOR[:like_operator]} ?)', "%#{params[:search]}%", "%#{params[:search]}%"])
Run Code Online (Sandbox Code Playgroud)