从SQLite到Heroku / PostgreSQL的多列简单搜索

时间:2010-12-04 04:18:00

标签: ruby-on-rails sqlite postgresql heroku

def self.search(search)
  if search
    where('name OR username OR bio LIKE ?', "%#{search}%")
  else
    scoped
  end
end

上面的代码在我的开发服务器上使用SQLite工作正常,但是由于Heroku使用PostgreSQL它会中断(似乎你只能在真正的布尔查询中使用“OR”)。

有没有更好的方法来实现这个简单的搜索,以便它可以与PostgreSQL一起使用,还是我必须转向更复杂的搜索解决方案?

1 个答案:

答案 0 :(得分:1)

你在找这样的东西吗?

def self.search(search)
  if search
    where('name IS NOT NULL OR username IS NOT NULL OR bio LIKE ?', "%#{search}%")
  else
    scoped
  end
end

如果nameusername可以为NULL或为空,那么您将要使用COALESCE:

def self.search(search)
  if search
    where("COALESCE(name, '') <> '' OR COALESCE(username, '') <> '' OR bio LIKE ?", "%#{search}%")
  else
    scoped
  end
end

这些在SQLite和PostgreSQL中的作用相同。