ruby-on-rails - ransack rails:不适用于使用 *_in 匹配器的空值
问题描述
我需要搜索可以选择多个下拉列表的位置(例如:状态为“活动”、“”)
我试过了
User.ransack({status_in: ['active', ''])
它返回结果如
select * from users where status in ("active")
但预期的结果应该是
select * from users where ("users"."deleted" != 't') AND status in ("active","")
我如何使用 ransack 来实现这一点?(获取状态为空且“活动”的用户列表)
解决方案
我如何使用 ransack 来实现这一点?(获取状态为空且“活动”的用户列表)
我想你的目标是获得users
空的or
活动状态。那么你可能需要一个单独的谓词:
*_blank
谓词使用 SQL: 检查属性是否为空或为空col is null OR col = ''
。
然后使用以下方法对查询进行分组OR
:
User.ransack(status_in: ['active'], status_blank: true, m: 'or')
它生成以下 SQL:
SELECT "users".* FROM "users" WHERE ("users"."status" IN ('active') OR ("users"."status" IS NULL OR "users"."status" = ''))
如果您需要再添加一个条件,那么像Rails
查询一样链接它怎么样,因为ransack
只需生成ActiveRecord::Relation
:
User.ransack(deleted_not_eq: 't').result
.ransack(status_in: ['active'], status_blank: true, m: 'or')
推荐阅读
- amazon-web-services - 如何在 DynamoDB 中处理最终一致的读取
- itext - itext 7 相当于 itext5 中的 getUnderContent 是什么?
- hyperledger-fabric - 当我尝试以参与者身份登录我的业务网络以访问该交易记录时,我遇到了以下错误:
- dynamics-crm - 如何选择 Dynamics CRM 参考属性?
- twitter-bootstrap - Bootstrap:在某些特定情况下使用断点,即 col-md-auto justify-content-md-center
- android - Gradle 已过时引发错误而不是警告
- c# - 访问自签名证书详细信息
- java - Java 孩子知道父母,但父母不知道他们的孩子
- javascript - 如果单击按钮,Node.js 调用函数
- javascript - 使用 Javascript 在文本区域中写一个换行符