def self.search(search)
if search
where('name OR username OR bio LIKE ?', "%#{search}%")
else
scoped
end
end
上面的代码在我的开发服务器上使用SQLite工作正常,但是由于Heroku使用PostgreSQL它会中断(似乎你只能在真正的布尔查询中使用“OR”)。
有没有更好的方法来实现这个简单的搜索,以便它可以与PostgreSQL一起使用,还是我必须转向更复杂的搜索解决方案?
答案 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
如果name
和username
可以为NULL或为空,那么您将要使用COALESCE:
def self.search(search)
if search
where("COALESCE(name, '') <> '' OR COALESCE(username, '') <> '' OR bio LIKE ?", "%#{search}%")
else
scoped
end
end
这些在SQLite和PostgreSQL中的作用相同。