Rails不是查询和正则表达式

时间:2016-03-29 14:08:20

标签: ruby-on-rails

我有一系列字符串:

a = ['*@foo.com', '*@bar.com', '*@baz.com']

我想查询我的模型,这样我就可以获得所有上述域名中没有电子邮件的记录。

我能做到:

Model.where.not(email: a)

如果列表是字符串列表,但列表更多是正则表达式。

2 个答案:

答案 0 :(得分:2)

这取决于您的数据库适配器。您可能可以使用原始SQL来编写此类查询。例如,你可以在postgres中做到:

Model.where("email NOT SIMILAR TO '%@foo.com'")

我并不是说你应该如何做到这一点,但是值得查看数据库的查询语言并查看是否符合您的需求。

在您的示例中,您必须将匹配器作为单个字符串连接在一起,然后将其插入到查询中。

a = ['%@foo.com', '%@bar.com', '%@baz.com']

Model.where("email NOT SIMILAR TO ?", a.join("|"))

答案 1 :(得分:0)

使用此代码:

a = ['%@foo.com', '%@bar.com', '%@baz.com']
Model.where.not("email like ?",a.join("|"))

*替换为数组中的%