我有一系列字符串:
a = ['*@foo.com', '*@bar.com', '*@baz.com']
我想查询我的模型,这样我就可以获得所有上述域名中没有电子邮件的记录。
我能做到:
Model.where.not(email: a)
如果列表是字符串列表,但列表更多是正则表达式。
答案 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("|"))
将*
替换为数组中的%
。