Today I found a very strange behavior of Ruby on Rails. I wanted to render a partial using the collection option. So far so normal. But: I needed the result to be wrapped with some stuff, so I found out, that you can just specify a layout! What I expected to get was something like:

Layout Layout Layout\ <%= yield %> <—- this should be filled with my partial Layout Layout Layout

So this is what I executed:

my_array = [“hello”, “world”]\ render(:partial => “test”, :collection => my_array, :layout => “test_layout”)

Layout file:

some text before yield\ <%= yield %>\ some text after yield

Partial file:

<%= test %>

I expected the result to be either:

some text before yield\ hello\ some text after yield\ some text before yield\ world\ some text after yield

or:

some text before yield\ hello\ world\ some text after yield

But instead I got this:

some text before yield\ hello\ world\ some text after yield\ some text before yield\ hello\ world\ some text after yield

So please tell me… WTF is going on!!