ruby-on-rails 在mongoid中搜索单词时不区分大小写

zrfyljdw  于 2023-01-03  发布在  Ruby
关注(0)|答案(5)|浏览(141)

有没有办法在mongoid中为不区分大小写的搜索设置一个属性?
假设某人有一个用户名:IAmGreat和我想找到用户数据使用他们唯一的用户名,而不是屠宰它,并将其更改为iamgreat。
谢啦,谢啦

nc1teljy

nc1teljy1#

实际上你可以搜索大小写不敏感。但是你必须用正则表达式搜索!下面是我在http://www.VersionEye.com中使用它的一个例子

User.first(conditions: {email: /^#{email}$/i})

使用“/”可以开始和结束正则表达式。正则表达式后面的“i”表示不区分大小写。“^”表示元素必须以搜索字符串开头,“$”表示元素必须以搜索字符串结尾。如果要查找精确匹配,这一点很重要。
2022年12月编辑:
这将在没有以下条件的情况下工作:

User.first(email: /#{email}/i)
rsl1atfo

rsl1atfo2#

你甚至可以尝试这样的东西:

User.where(username: /#{username}/i).first
lx0bsm1f

lx0bsm1f3#

如果你正在使用rails或者mongoid,你可以试试ff:
第一个月

jobtbby3

jobtbby34#

为什么在进行比较时不直接将User.login.downcase(或者任何模型/属性组合)小写呢?这将使DB中的大写保持原样,但仅为了比较而将字段小写。

3hvapo4f

3hvapo4f5#

如果您的应用程序不需要将用户输入存储为区分大小写,只需在输入时将输入转换为大写或小写即可。

username = params[:username].to_s.downcase

否则,如果性能对您来说是个问题(不区分大小写的正则表达式不能利用索引),正确的方法是为username存储一个备份字段

field :username_downcase

然后执行查询:

User.where(username_downcase: params[:username].to_s.downcase)

相关问题