Это правильное поведение кода, который вы написали.Давайте посмотрим, например:
- ['1', '2' ,'3'].each do |var|
%div= var
%div= var
не возвращается в результате выполнения блока.В общем случае он работает в формате html.
В вашем случае:
= Haml::Engine.new('#bar= yield').render do
this should show up inside div, right?
string this should show up inside div, right?
отображается как haml и переходит непосредственно в html, а вы возвращаете блок 0. Поэтомутакой результат:
this should show up inside of the div, right?
<div id="bar">
0
</div>
Итак, в вашем случае вы должны сделать так:
= Haml::Engine.new('#bar= yield').render { 'this should show up inside div, right?' }