我需要搜索可以在其中选择多个下拉菜单的地方(例如:状态为“有效”,“”)
我尝试过
User.ransack({status_in: ['active', ''])
,它返回类似
的结果select * from users where status in ("active")
但预期结果应该是
select * from users where ("users"."deleted" != 't') AND status in ("active","")
我该如何使用ransack做到这一点?(获取状态为空且处于“活动”状态的用户列表)
答案 0 :(得分:1)
我该如何使用ransack做到这一点?(获取状态为空且处于“活动”状态的用户列表)
我想您的目标是获得users
为空的or
有效状态。那么您可能需要一个单独的predicate:
*_blank
谓词使用SQL:col is null OR col = ''
来检查属性为空还是空。
然后使用OR
group the queries:
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')