如何消除erb中的换行符

问题描述 投票:0回答:1

我正在尝试将ERB与纯文本文件一起使用。这是纯文本文件的内容:

<% if true %>
<%= 'bar' %>
<% end %>
<%= 'foo' %>
<%= 'bar' %>

我通过ERB获得的结果是:

bar

foo
bar

我想得到的结果是:

bar
foo
bar

在“ bar”和“ foo”之前没有空换行符。

现在,我知道这是因为ERB被配置为(默认情况下)可用于HTML文件。我要的是在我的情况下使用纯文本文件。我知道这是“某种程度上”的可能,因为在Rails中,当您使用Rails邮件程序配置纯文本文件时,不会发生这种情况。

这是我要执行的操作的全景图:我正在尝试编写纯文本文章,但是中间有一些Ruby代码。我以为我会为此使用ERB,但是我得到的第一个绊脚石就是这个。

ruby-on-rails ruby erb
1个回答
0
投票

在它的默认模式下,ERB在<% ... %>表达式之外将字面值视为非常字面值。因此,可以将您的文本视为流,如下所示:

<% if true %><LF><%= 'bar' %><LF><% end %><LF><%= 'foo' %><LF><%= 'bar' %><LF>

如您所见,您将在“ bar”之前获得换行符,在“ foo”之前获得两个换行符。 ,输出将是:

<blank line>
bar
<blank line>
foo
bar

解决方法是对erb使用“修剪模式”选项。将文件写为:

<% if true -%>
<%= 'bar' %>
<% end -%>
<%= 'foo' %>
<%= 'bar' %>

然后呼叫erb -T - your_erb_file.erb

bar
foo
bar

-T -告诉erb如果行以-%>结尾,则删除行尾。如果erb指令以<%-开头,则前导空格将被删除。有关详细信息,请参见此manual page for erb

© www.soinside.com 2019 - 2024. All rights reserved.