鉴于使用 Arel 运算符(例如 .eq)生成的 SQL 条件 cond1、cond2 和 cond3,我似乎无法使用 Arel 来生成 SQL:
SELECT * FROM <table> WHERE (cond1 AND cond2) OR cond3
这是因为与条件一起使用.where(),但你不能然后.or() .where() 的结果。您只能在 .where() 中同时使用 .or() 条件。即 .where 和 .or 不在同一个“级别”上,我猜想需要一个与 .or() 级别相同的专用 .and() 方法。
请注意,(cond1 AND cond2) 周围的括号表示这些条件同时被 AND 在一起,其中 OR cond3 是在循环的另一个迭代中添加的。它们对查询结果没有影响。
我已经阅读了 Arel README 并且没有针对这种情况的示例,我无法弄清楚如何使用具有 OR 运算符 | 的 Squeel 动态构建此查询(在循环中)。