Rails-4中不区分大小写的Active Record查询

4

目前我正在使用rails 4开发一个项目,在example.com/username有一个用户页面,但只有在正确大小写下才能找到该记录,如何在active record rails中执行不区分大小写的搜索。

请查看我的代码:

@user = User.find_by_username(params[:username].downcase)

3个回答

3

您将需要使用类似于where("username ILIKE ?")的东西。但是,ILIKE或类似语法取决于您的数据库。


1
另一个选项可能是:

def self.search(query)
    where("lower(name) LIKE lower(?)", "%#{query}%") 
end

这在sqlite或PostgreSQL中都可以运行。

"%#{query}%" 语法匹配包含查询值的任何字符串,在许多情况下都可以使用。但是,如果尝试仅匹配精确的不区分大小写的值,则最好/更快的方法是:where("lower(name) = lower(?)", "#{query}") - lgants
请注意,当您执行类似以下方式的列值函数时,可能没有使用数据库索引。这可能会非常慢。这取决于您的数据库和所创建的索引的性质(例如ORACLE的基于函数的索引)。 - djb

0

你可以使用 Arel 表。

# Suppose the target username in DB is 'FooBAR'.
t = User.arel_table
@user = User.find_by(t[:username].matches 'foobar')

这将查找用户名类似于'FooBar'、'foobar'、'FOOBAR'等等的用户。

更多细节请参见: https://github.com/rails/arel


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接