如何在Rails 4中实现基于多个条件的复杂where.not查询?
- 内容介绍
- 文章标签
- 相关推荐
本文共计253个文字,预计阅读时间需要2分钟。
我需要表达的是:`Model.where(一个IS NOT NULL或NOTOR是NULL)`。在Rails 4中,`where.not`子句被启用:`Model.where.not(a: nil, b: nil)`。但此表达式等同于`Model.where(不是NULLANDb不是NULL)`。如何使用`where.not`子句来表达这个条件?
我要表达的是:Model.where(“一个IS NOT NOTOR或非NULL”).在Rails 4中,where.not子句被启用:Model.where.not(a:nil,b:nil).
但是,此表达式等于Model.where(“不是NULLANDb不是NULL”).
如何用where.not子句表达“一个IS NOT NULLORb IS not NULL”?
您可以使用where.not尝试创建查询,例如a和b属性:query = Model.where.not(a: nil, b: nil)
然后通过传递or运算符,在之前创建的查询的where值中使用inject:
Model.where(query.where_values.inject(:or))
这将为您提供如下查询:
SELECT "model".* FROM "model" WHERE ("model"."a" IS NOT NULL OR "model"."b" IS NOT NULL)
尽管第一个使用AND运算符给你一些东西,比如:
SELECT "model".* FROM "model" WHERE ("model"."a" IS NOT NULL) AND ("model"."b" IS NOT NULL)
本文共计253个文字,预计阅读时间需要2分钟。
我需要表达的是:`Model.where(一个IS NOT NULL或NOTOR是NULL)`。在Rails 4中,`where.not`子句被启用:`Model.where.not(a: nil, b: nil)`。但此表达式等同于`Model.where(不是NULLANDb不是NULL)`。如何使用`where.not`子句来表达这个条件?
我要表达的是:Model.where(“一个IS NOT NOTOR或非NULL”).在Rails 4中,where.not子句被启用:Model.where.not(a:nil,b:nil).
但是,此表达式等于Model.where(“不是NULLANDb不是NULL”).
如何用where.not子句表达“一个IS NOT NULLORb IS not NULL”?
您可以使用where.not尝试创建查询,例如a和b属性:query = Model.where.not(a: nil, b: nil)
然后通过传递or运算符,在之前创建的查询的where值中使用inject:
Model.where(query.where_values.inject(:or))
这将为您提供如下查询:
SELECT "model".* FROM "model" WHERE ("model"."a" IS NOT NULL OR "model"."b" IS NOT NULL)
尽管第一个使用AND运算符给你一些东西,比如:
SELECT "model".* FROM "model" WHERE ("model"."a" IS NOT NULL) AND ("model"."b" IS NOT NULL)

