我在我的Rails应用程序中有一个标准的User
模型。包括名字、姓氏、电子邮件等。我正在尝试搜索符合特定条件的所有用户。
我知道我可以搜索特定的电子邮件地址,如下所示:
User.find_by_email('john@smith.com')
但是,假设我想找到所有拥有Gmail地址的用户(例如),理想情况下,这将通过以下方式完成:
User.find_by_email(/.*@gmail.com/)
但是这不起作用,它给出了一个TypeError: Cannot visit Regexp
,我该如何执行这个activerecord搜索呢?
3条答案
按热度按时间7dl7o3gd1#
.find(_by)
只返回第一个匹配项。由于您要查找 * 所有 * 具有Gmail地址的用户,因此需要使用.where
。您可以轻松地将查询与某些正则表达式组合在一起:
对于Mysql,请使用
REGEXP
对于Postgres,请使用
regexp_matches
:5tmbdcev2#
在
/.*@gmail.com/
的例子中,要查找以已知子字符串结尾的字符串,实际上并不需要真正的正则表达式。相反,一个更快的替代方法是LIKE
搜索:8yparm6h3#
从PostgreSQL Ver.14开始,@davegson的答案在Postgres中不起作用。这里有两种方法--对于不区分大小写的匹配,电子邮件地址应该是:
PostgreSQL官方文档