Is it possible to have Haml indent HTML generated by a view helper in Rails?

haml, ruby-on-rails

Solution

Try out the `haml_tag` helper method provided with Haml. It's like `content_tag` in some ways, but it outputs properly indented HTML. The main difference is that it outputs directly to the template, rather than returning a string. For example:

module ThingsHelper
  def foo
    haml_tag :ul do
      3.times { haml_tag(:li, "foo") }
    end
  end
end

(As a side note, it's considered very bad Ruby style to use something other than two spaces for indentation).

Problem

Say I have a things resource with a view helper method such as: ``` module ThingsHelper def foo ret = "" 3.times { ret += content_tag(:li, "foo") } content_tag(:ul, ret) end end ``` This, then, is used in a template: ``` %p = foo ``` The HTML source that's generated looks like this: ``` <!DOCTYPE html> <html> <head> <title>Foo</title> </head> </html> <body> <p> <ul><li>foo</li><li>foo</li><li>foo</li></ul> </p> </body> ``` As you can see, the helper output is not indented as the rest of the code. Any way to remedy this?

Original source