【发布时间】:2018-12-18 12:10:31
【问题描述】:
我的情况是根据某些条件过滤记录(条件是范围的形式)。在用户模型中
scope :has_email, -> { where('email IS NOT NULL') }
scope :email_contains, (email) -> { where("email ILIKE :email'", email: email)}
如果我想将这两个条件与“AND”运算符结合起来,我们可以这样做,
User.has_email.email_contains
生成的查询将是
SELECT "user".* FROM "user" WHERE (email ILIKE '%gmail.com%') AND (email IS NOT NULL)
如果我需要将作用域与OR 运算符结合使用,我该如何进行?我发现rails 5增加了对or方法(https://blog.bigbinary.com/2016/05/30/rails-5-adds-or-support-in-active-record.html)的支持,但是如果我们使用includes或者joins就不行了
例如:User.has_email.or(User.some_scope).or(User.joins(:event).temp)
如何使用OR 加入范围?
【问题讨论】:
-
但是在上面给出的示例中,如果电子邮件为 NULL,如果我们知道电子邮件为 NULL,为什么还要检查电子邮件的值?
-
我的用例很复杂,我只是想解释一下我需要的逻辑。
-
嗯好的。不过,您可以在单个范围内执行 OR。不太确定在级联范围时是否有 OR 方法。
标签: ruby-on-rails activerecord ruby-on-rails-5 active-record-query