虽然一般我喜欢在我的数据库中区分大小写,但有时候确实很麻烦。user_name和email是我不想担心大小写的字段的好例子,特别是在搜索时。
使用类似下面这样的代码,在保存之前将字符串转换为小写非常容易:
before_save do self.email.downcase! end
这样,用户名称和电子邮件始终以小写形式保存。但是,查找find_by_user_name和find_by_email的最佳方法是什么?当然,我可以记住始终将传递到这些方法中的字符串转换为小写,但这似乎不太符合DRY原则。
我考虑过重写find_by_email并在将e-mail转换为小写后调用super,但我没有成功弄清楚。
那么,最好的方法是什么呢?
PS 我不认为像这篇文章(如何编写Rails 3中的不区分大小写的find_by_email)这样的相关帖子试图解决同样的问题。对于我来说,使用“lower”进行自定义SQL是无意义的,因为我已经确保所有这些值都是小写的 - 现在需要将输入的值(可能来自用户输入的表单)转换为小写。