如何使用大写的用户名但搜索它们不区分大小写?

时间:2013-03-15 07:50:12

标签: ruby-on-rails username

在Rails中,如何允许用户在其用户名中使用大写字母(如GreatestOneEver),但在搜索时仍然具有大小写不敏感(如User.find_by_username“mostoneever”)或执行其他任务?基本上,我希望我的用户看到他们的用户名看起来大写,但在幕后,在所有代码中使用较低的套件版本。

我有一个想法:在模型中添加一个新字段,名为display_name或者其他东西。还有更好的方法吗?

编辑: 我不想使用正则表达式或其他东西进行搜索,因为这样效率很低。我真的需要用户名索引!但是也有不区分大小写的查找。也许display_name是最好的主意?

2 个答案:

答案 0 :(得分:1)

这是一种可能性

name = "GreatestOneEver"
User.find(:first, :conditions => [ "lower(name) = ?", name.downcase ])

但是,我猜你是否在搜索不区分大小写,那么你可能会得到多个结果。所以你可以删除:first。

答案 1 :(得分:0)

尝试humanize如果您的字符串带有下划线(_),则可能有效。或者对于搜索过程,尝试使用正则表达式:

{username: /#{Regexp.escape(search)}/i}

搜索是你的价值。