是否有可能在Rails中使用视图助手生成的Haml缩进HTML?

时间:2009-10-06 21:21:52

标签: ruby-on-rails haml

假设我有一个带有视图帮助方法的事物资源,例如:

module ThingsHelper
  def foo
    ret = ""
    3.times { ret += content_tag(:li, "foo") }
    content_tag(:ul, ret)
  end
end

然后,在模板中使用它:

%p
  = foo 

生成的HTML源代码如下:

<!DOCTYPE html>
<html>
    <head>
        <title>Foo</title>
    </head>
</html>
<body>
    <p>
        <ul><li>foo</li><li>foo</li><li>foo</li></ul>
    </p>
</body>

正如您所看到的,辅助输出不会缩进为其余代码。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:10)

试用Haml提供的haml_tag helper method。它在某些方面类似于content_tag,但它输出正确的缩进HTML。主要区别在于它直接输出到模板,而不是返回一个字符串。例如:

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

(作为旁注,使用除了两个空格之外的东西进行缩进被认为是非常糟糕的Ruby风格。)

答案 1 :(得分:1)

我对此表示怀疑 - 至少不会没有大量的捣乱。

你的= foo只是打印你的foo助手返回的内容 - 它不会被haml解析。你也不能在你的助手方法中写haml。

我能想到的最简单的方法是在你的帮助器中添加文字空白字符(即\n\t)。

你也可以在你的帮助器中require相关的haml类,并在ret上手动调用解析方法,但这可能比值得更复杂。