views:

305

answers:

2

In my Rails app, I loop through an array to create a list of conditions that must be joined by OR. Below is the basic flow of how I currently do so.

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

Obviously, it's not beautiful, but I still don't fully know my way around Arel. Does it offer any better way of OR-joining a set of dynamically-generated conditions?

A: 

I think that's basically it. I'd initialize conditions to the base object to avoid the ternary:

scope = Article
set.each{|v| scope = scope.or(v.to_condition)}
pjb3
+3  A: 

This is a perfect fit for an inject which will give you a one-liner you can use within something else as well: conditions = set.inject { |conds, cond| conds.or(cond) } which can even be written: set.inject(&:or) which is very nice.

ormuriauga
Wow — I love `inject`, overuse it, and somehow missed it for this scenario! Thanks! :)
Matchu