不具有区分大小写的搜索活动记录

我使用rails 3.0.4

这是我的rails应用程序中的一段Arel查询,如何使用upcase方法以数据库无关的方式进行无区分大小写的搜索?

Customer.where("company_id = ? and (firstname like ? or lastname like ? or reference like ?)", current_user.company_id, "%#{params[:query]}%", "%#{params[:query]}%", "%#{params[:query]}%") 

谢谢

这里有几个选项。

首先, LIKE已经不区分大小写了,但是对于Postgres,你必须使用ILIKE来使你的搜索不区分大小写。

 Customer.where('firstname LIKE ?', "%john%").first.name => 'John' 

其次,如果要使用不区分大小写与非模式匹配比较(如<>,=,<=等)进行比较,则可以使用COLLATE命令强制不区分大小写的匹配:

 Customer.where('firstname COLLATE utf8_unicode_ci = ?', 'john').first.name => 'John' 

似乎Postgres还没有COLLATE命令,但您可以在此处查看有关不区分大小写的搜索选项的更多信息。 通常,当您想要执行模式匹配或复杂查询时,您将无法以数据库无关的方式执行此操作。 我的建议是在开发和生产中使用单个数据库系统。 这可以确保您的查询在两种环境中的行为方式也相同,从而减少错误。 如果您确实需要支持多个数据库系统,那么您最好的选择就是创建两个不同的查询 – 一个在MySQL上运行,另一个在Postgres上运行。