使用具有多个条件的ActiveRecord进行搜索

时间:2018-03-08 02:34:07

标签: ruby-on-rails ruby

我想搜索一个数组中给出的多个条件的表。

我有一个像这样的数组

[{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}) ...

但是,我不知道数组的长度,也不知道哈希中的值,这意味着我不能像上面的最后一个代码那样进行硬编码。

有什么想法吗?

1 个答案:

答案 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)}