This is a workaround for a Rails 3 bug that’s present at least through beta 3. Their #fragment_for assumes that the block will return its contents as a string, which is not always the case. Luckily, it only makes this assumption if caching is disabled, so we only override that case.
# File lib/haml/helpers/action_view_mods.rb, line 199 def fragment_for_with_haml(*args, &block) return fragment_for_without_haml(*args, &block) if controller.perform_caching capture(&block) end