Ruby on rails 是否可以让Rails中的视图助手生成Haml缩进HTML?

Ruby on rails 是否可以让Rails中的视图助手生成Haml缩进HTML?,ruby-on-rails,haml,Ruby On Rails,Haml,假设我有一个具有视图帮助器方法的things资源,例如: 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>

假设我有一个具有视图帮助器方法的things资源,例如:

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>
  • foo
  • foo
  • foo

正如您所看到的,助手输出没有像代码的其余部分那样缩进。有什么办法可以解决这个问题吗?

我对此表示怀疑——至少在没有大量垃圾的情况下是这样

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

我能想到的最简单的处理方法就是在助手中添加文本空白字符(即
\n
\t

您也可以
在助手中要求相关的haml类,并在
ret
上手动调用解析方法,但这可能会非常复杂。

尝试haml提供的方法。它在某些方面类似于
content\u tag
,但它输出正确缩进的HTML。主要区别在于它直接输出到模板,而不是返回字符串。例如:

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

(顺便说一句,使用两个空格以外的空格进行缩进被认为是非常糟糕的Ruby风格)。

效果很好。在以下位置用树结构集合的格式化程序记录了一个简单的示例: