ruby-on-rails-3 - Rails Active Record 不区分大小写的查找

标签 ruby-on-rails-3 activerecord find

虽然总的来说我喜欢在我的数据库中区分大小写,但有几次我觉得它很痛苦。 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/

相关文章:

ruby-on-rails - 如何在 Controller 中获取 f.submit 的名称参数?

ruby-on-rails - 当 api_key 存在时跳过_before_filter

jquery - .autocomplete 不是一个函数

ruby-on-rails - Rails 有许多动态条件子句

ruby-on-rails - 从 ActiveRecord 结果中排除 ID 列

php - Yii 1.1 中的默认范围

bash - 替换exec中的部分文件路径

perl - 使用 File::Find 忽略隐藏文件

python - 在字符串中查找数组项

ruby-on-rails - 如何在heroku上禁用 Assets 管道?