如何基于正则表达式执行活动记录搜索

时间:2015-04-02 18:38:05

标签: ruby-on-rails regex activerecord

我的rails应用程序中有一个标准的User模型。完成名字,姓氏,电子邮件等。我试图搜索符合特定条件的所有用户。

我知道我可以按如下方式搜索特定的电子邮件地址:

User.find_by_email('john@smith.com')

但是我想找到所有拥有Gmail地址的用户(例如)。理想情况下,这将通过以下方式完成:

User.find_by_email(/.*@gmail.com/)

但这并不奏效。它给了我一个TypeError: Cannot visit Regexp。如何执行此活动记录搜索?

2 个答案:

答案 0 :(得分:7)

.find(_by)仅返回第一场比赛。由于您要查找具有Gmail地址的所有用户,因此您需要使用.where

您可以轻松地将查询与某些正则表达式结合起来。 Mysql& Postgres支持这个:

User.where("email REGEXP ?", '.*@gmail.com')

答案 1 :(得分:1)

在您查找以已知子字符串结尾的字符串/.*@gmail.com/的情况下,您实际上并不需要真正的正则表达式。相反,更快的替代方法是LIKE搜索:

User.where("email LIKE ?", '%@gmail.com')