我想搜索一个数组中给出的多个条件的表。
我有一个像这样的数组
[{u_id: 4, lv: 2}, {u_id: 10, lv: 1}, {u_id: 11, lv: 3}, ...]
和这样的表格。
==== User Levels Table ====
| id | u_id | lv | desc |
| 1 | 1 | 1 | hoge |
| 2 | 1 | 2 | moke |
| 3 | 2 | 1 | doge |
...
我尝试了以下代码进行测试,并得到了我想要的结果。
user_levels = UserLevel.where({u_id: 4, lv: 2})
.or(UserLevel.where({u_id: 10, lv: 1})
.or(UserLevel.where({u_id: 11, lv: 3}) ...
但是,我不知道数组的长度,也不知道哈希中的值,这意味着我不能像上面的最后一个代码那样进行硬编码。
有什么想法吗?
答案 0 :(得分:2)
我认为您需要的是将条件数组映射到我们可以在减少块中与or
连接在一起的关系:
array_of_conditions = [{u_id: 4, lv: 2}....]
user_levels = array_of_conditions.map {|cond| UserLevel.where(cond)}.reduce {|memo, cond| memo.or(cond)}