我必须查找来自User
模型的所有具有子串“cpg”的电子邮件。所以它匹配“cpg@yahoo.com”,“cpg3333 @ yahoo.com”等
我很确定如何不区分大小写(使用User.where("lower(email)...")
但我不知道如何找到子字符串。
我正在使用Rails 3 + Postgres 9.x
答案 0 :(得分:13)
Rails中没有任何东西可以使用PostgreSQL的ilike
(不区分大小写的函数)。
像这样:User.where("email ilike '%cpg%'")
答案 1 :(得分:8)
如果您不想在每次搜索电子邮件字段时始终记得在Ruby中输入lower(email)
(和input.downcase
),则可以{{ 1}}列本身通过使用email
数据类型不区分大小。
这就是我刚才所做的。我创建了这样的迁移:
citext
现在我不再需要做任何额外的努力来使查询不区分大小写!它现在在幕后自动处理。
这使用PostgreSQL的citext扩展名。
http://www.sfcgeorge.co.uk/posts/2013/11/12/case-insensitive-usernames-with-postgres有一篇很好的文章。
答案 2 :(得分:6)
实际上,您可以在Rails中执行此操作:http://robb.weblaws.org/2013/12/05/yes-rails-supports-case-insensitive-database-queries/
答案 3 :(得分:1)