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

时间:2010-06-07 19:17:30

标签: ruby-on-rails ruby-on-rails-3 arel

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

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

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

3 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:1)

还有一个有用的插件。

conditions_helper

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

答案 2 :(得分:0)

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

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