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

Zac*_*ack 3 regex activerecord ruby-on-rails

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

我知道我可以搜索特定的电子邮件地址,如下所示:

User.find_by_email('john@smith.com')
Run Code Online (Sandbox Code Playgroud)

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

User.find_by_email(/.*@gmail.com/)
Run Code Online (Sandbox Code Playgroud)

但这不起作用.它给了我一个TypeError: Cannot visit Regexp.如何执行此活动记录搜索?

dav*_*son 7

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

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

User.where("email REGEXP ?", '.*@gmail.com')
Run Code Online (Sandbox Code Playgroud)

  • PostgreSQL 11 不支持 **REGEXP** (2认同)

tan*_*ius 5

在您的特定情况下,您正在寻找以已知子字符串结尾的字符串:.*@gmail.com

你不需要正则表达式。搜索LIKE就足够而且更快:

User.where("email LIKE ?", '%@gmail.com')
Run Code Online (Sandbox Code Playgroud)