gpt4 book ai didi

ruby-on-rails - 具有事件记录的不区分大小写的搜索

转载 作者:行者123 更新时间:2023-12-04 13:34:54 24 4
gpt4 key购买 nike

我使用滑轨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命令,但是您可以查看有关不区分大小写的搜索选项 here的更多信息。通常,当您要执行模式匹配或复杂查询时,您将无法以与数据库无关的方式执行此操作。我的建议是在开发和生产中都使用单个数据库系统。这样可以确保您的查询在两种环境中的行为也相同,这将导致更少的错误。如果确实需要支持多个数据库系统,那么最好的选择就是简单地创建两个不同的查询-例如,一个在MySQL上运行,另一个在Postgres上运行。

关于ruby-on-rails - 具有事件记录的不区分大小写的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com