Rails - 不区分大小写的搜索条件

发布于 2024-10-13 06:45:07 字数 296 浏览 2 评论 0原文

我有以下问题:

  @users = User.find( :all,
                      :select => 'users.*',
                      :conditions => ["fname || ' ' || lname LIKE ?", '%'+"#{params[:q]}"+'%']

这里的问题是搜索输入 params[:q] 区分大小写。如何在我的 Rails 3 Heroku 应用程序中使其不区分大小写?

谢谢

I have the following:

  @users = User.find( :all,
                      :select => 'users.*',
                      :conditions => ["fname || ' ' || lname LIKE ?", '%'+"#{params[:q]}"+'%']

Problem here is that the search input params[:q] is case sensitive. How can I make it case insensitive in my Rails 3 Heroku app?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

诗化ㄋ丶相逢 2024-10-20 06:45:07

对于 PostgreSQL 来说,要使 LIKE 不区分大小写,只需使用 ILIKE。它根据活动区域设置工作。

For PostgreSQL to get case insensitive LIKE just use ILIKE. It works according to the active locale.

oО清风挽发oО 2024-10-20 06:45:07

此问题的一个相当“常见”的解决方法似乎是使用 UPPER 函数将您的情况下的“fname”或“lname”转换为大写并转换 params[:q] 以及使用例如 upcase

A fairly "common" workaround for this problem seems to be to use the UPPER function to convert in your case "fname" or "lname" into uppercase and convert params[:q] as well, using e.g. upcase.

⊕婉儿 2024-10-20 06:45:07

或者...将其粘贴到您的模型中并通过传入字符串数组进行调用

def self.find_all_by_lowercasing_name(str_array)
    wrapped = str_array.collect { |a| "'"+ "#{a.downcase}" + "'" }
    return MyModel.where("lower(\"my_models\".\"name\") IN (#{wrapped.join(', ')})")
end

以上适用于 Postgres 和 Sqlite

Alternatively... stick this in your model and call by passing in a string array

def self.find_all_by_lowercasing_name(str_array)
    wrapped = str_array.collect { |a| "'"+ "#{a.downcase}" + "'" }
    return MyModel.where("lower(\"my_models\".\"name\") IN (#{wrapped.join(', ')})")
end

The above works with Postgres and Sqlite

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文