` - %>`标签默认情况下似乎不起作用

时间:2015-12-31 04:19:25

标签: ruby erb

我有一个erb脚本:

<% foo="second" %>
first <%= foo %> third

当我使用erb命令运行它时,它会在输出中放置一个前导空行:

% erb junk

first second third

但是当我在第一行中将结束%>更改为-%>时,除非我使用erb -T -,否则脚本会失败:

~$ erb junk1
/usr/share/ruby/erb.rb:850:in `eval': junk1:1: syntax error, unexpected ';' (SyntaxError)
_erbout = '';  foo="second" -; _erbout.concat "\n"
                              ^
        from /usr/share/ruby/erb.rb:850:in `result'
        from /usr/share/ruby/erb.rb:832:in `run'
        from /bin/erb:133:in `run'
        from /bin/erb:154:in `<main>'
$ erb -T - junk1
first second third

我认为-%>应该始终被识别为跳过尾随换行符的标记。我正在测试这些模板与Puppet一起使用,所以我假设P​​uppet会识别-%>标签,而这个funkiness只是erb命令的一部分。

1 个答案:

答案 0 :(得分:0)

为了启用trim_mode-%>),您必须使用trim模式参数实例化ERB对象,例如:

e = ERB.new(str, nil, '-')

请注意,Rails默认情况下不使用stdlib&#39; ERB,而是使用erubis。有关此功能的文档可以在Section 6.3 here

中找到
  

自2.6.0以来,&#39;&lt;%= - %&gt;&#39;删除尾部空格和换行符。当修剪模式为&#39;时,这与ERB相容。 &#39;&lt;%= =%&gt;&#39;还删除了尾部空格和换行符,这是Erubis原始的增强功能(比#&lt;&lt;%= - %&gt;&#39;更冷,&#39;,不是吗?)。

有关详细信息,请参阅ERB documentation。另请注意,如果您在-%>之后有任何培训空间,则可能导致 的换行符被裁减。