虽然总的来说我喜欢在我的数据库中区分大小写,但有几次我觉得它很痛苦。 user_name 和 email 是我不想担心的字段的好例子——尤其是在搜索时。
在保存之前使用以下内容很容易将字符串小写:
before_save 做
self.email.downcase!
结尾
这样,用户名和电子邮件始终以小写形式保存。但是 find_by_user_name 和 find_by_email 的最佳方法是什么?我当然可以记住总是将我传递给这些方法的字符串小写——但这似乎不是很干。
一旦我缩小电子邮件的大小写,我就考虑过覆盖 find_by_email 并用 super 调用原始文件,但我没有运气弄清楚这一点。
那么,最好的方法是什么?
PS 我不认为像这样的相关帖子( how can I write a case-insensitive find_by_email for Rails 3 )试图解决同样的问题。此处带有“较低”的自定义 sql 对我来说是毫无意义的,因为我已经确保所有这些值都较低——它是现在进来的(可能来自用户输入它的表单),我需要小写。
最佳答案
使用 PostgreSQL,您可以:
User.where("email ILIKE ?", email).first
关于ruby-on-rails-3 - Rails Active Record 不区分大小写的查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11341637/