如何消除erb中的换行符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何消除erb中的换行符相关的知识,希望对你有一定的参考价值。

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

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

我通过ERB获得的结果是:

bar

foo
bar

我想得到的结果是:

bar
foo
bar

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

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

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

答案

在它的默认模式下,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

以上是关于如何消除erb中的换行符的主要内容,如果未能解决你的问题,请参考以下文章

覆盖javascript以消除闪烁

erb去掉末尾换行 -%>使用方法

erb模板中的一条评论如何?

erb中的Ruby三元运算符?

如何改进 Ruby on Rails 视图中的代码

如何在 rails (4.1.5) 中创建固定装置(对于 Devise 用户)作为 yml.erb?