rails-4 中不区分大小写的活动记录查询
Case insensitive active record query in rails-4
目前我正在 rails 4 中的一个项目中工作,其中我有一个示例用户页面。com/username 但如果我在正确的情况下使用用户名,它只会找到记录,如何我可以在活动记录 rails 中执行不区分大小写的搜索吗?
在下面查看我的代码
@user = User.find_by_username(params[:username].downcase)
您将不得不使用类似于 where("username ILIKE ?")
的东西。 ILIKE
或类似语法取决于您的数据库。
另一个选项可以是:
def self.search(query)
where("lower(name) LIKE lower(?)", "%#{query}%")
end
这适用于 sqlite 或 PostgreSQL。
您可以使用 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。
目前我正在 rails 4 中的一个项目中工作,其中我有一个示例用户页面。com/username 但如果我在正确的情况下使用用户名,它只会找到记录,如何我可以在活动记录 rails 中执行不区分大小写的搜索吗? 在下面查看我的代码
@user = User.find_by_username(params[:username].downcase)
您将不得不使用类似于 where("username ILIKE ?")
的东西。 ILIKE
或类似语法取决于您的数据库。
另一个选项可以是:
def self.search(query)
where("lower(name) LIKE lower(?)", "%#{query}%")
end
这适用于 sqlite 或 PostgreSQL。
您可以使用 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。