Only a small tweak: Your code suffers from having to know the number of elements in the array being processed. This takes the form of the magic number 3 used to make the true array. Here is an alternative. Better? Dunno, but at least no magic numbers to break.
[1,2,3].zip([true].cycle).flatten
yields
[1, true, 2, true, 3, true]
Curious note: Adding a space between the "zip" and the opening "(" will cause the interpreter (version 2.3.3 in my tests) to generate an error:
Error NoMethodError: undefined method `flatten' for #<Enumerator: [true]:cycle>
This may be more robust as it avoids ambiguity in Ruby's "friendly" parser:
([1,2,3].zip([true].cycle)).flatten