Arel:如何用OR干净地加入多个条件?

在我的Rails应用程序中,我遍历一个数组以创建必须由OR连接的条件列表。 以下是我目前这样做的基本流程。

conditions = nil set.each do |value| condition = value.to_condition conditions = conditions ? conditions.or(condition) : condition end 

显然,它并不漂亮,但我仍然不完全了解Arel的方式。 它是否提供了更好的OR加入一组动态生成条件的方法?

这是一个完美的inject ,它可以为你提供一个你可以在其他东西中使用的conditions = set.inject { |conds, cond| conds.or(cond) }conditions = set.inject { |conds, cond| conds.or(cond) } conditions = set.inject { |conds, cond| conds.or(cond) }甚至可以写成: set.inject(&:or)非常好。

还有一个有用的插件。

conditions_helper

它有助于产生复杂的条件。

我认为基本上就是这样。 我将条件初始化为基础对象以避免三元组:

 scope = Article set.each{|v| scope = scope.or(v.to_condition)}