Alternately taking elements from an array
This one-liner should be what you're looking for:

def alternate_take(xs, ys) 
  raise ArgumentError, "Unequal length" if xs.length != ys.length
  xs.zip(ys).map.with_index{|(x,y),i| i.even? ? x : y} 
end


Follow Up

Tokland's answer to OP's followup about a solution without indexes is really clever.  Here's another variation, which I don't like as much as the index version, but it answers the question:

def alternate_take(xs, ys) 
  raise ArgumentError, "Unequal length" if xs.length != ys.length
  xs.zip(ys).reduce([]){|m,(x,y)| m + (m.size.even? ? [x] : [y])} 
end