为什么这个查询不适用于Heroku?

时间:2011-08-20 23:32:14

标签: ruby-on-rails sqlite postgresql heroku

尝试使用RoR和Heroku实现简单搜索。这在localhost上工作正常但是一旦我推送到Heroku,搜索就不会返回任何结果。我在本地使用SQlite而Heroku使用Postgres,对吗?我认为这是问题,但经过相当多的研究后,我似乎无法找到解决方案。知道可能会发生什么吗?一如既往的帮助。

def self.search(search)
  if search
   where("title LIKE ? OR description LIKE ?", "%#{search}%", "%#{search}%")
  else
   find(:all)
  end
end

1 个答案:

答案 0 :(得分:4)

可能是因为SQLite's LIKE(部分)不区分大小写,但PostgreSQL's LIKE区分大小写。试试这个:

where("LOWER(title) LIKE ? OR LOWER(description) LIKE ?", "%#{search.downcase}%", "%#{search.downcase}%")

PostgreSQL也将ILIKE作为LIKE的不区分大小写的版本,但SQLite(也不是标准SQL)不会这样,所以除非你专门针对PostgreSQL,否则你不应该使用ILIKE。

如果您要发布到Heroku,请将您的开发环境切换到PostgreSQL,您将为自己节省一些悲伤和困惑。

另一种可能性是您的Heroku数据库中没有任何数据(或任何匹配的数据)。