ruby-on-rails - 如何消除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
<%-
erb
推荐阅读
- javascript - 仅当不在消息 div 的底部附近时,保持滚动位置才有效
- sql-server - 如何从 Excel 记录集中格式化日期?
- go - 防止修改结构数据成员的惯用方法
- java - Vertx-java-HttpClient:如何派生 maxPoolSize 和 maxWaitQueueSize 值及其影响
- passport.js - user.validatePassword 不是函数
- javascript - 使用 JS 对象作为 API 的缓存
- c# - 如何统一在特定区域进行屏幕截图
- c# - 将带有附件的信息发送到一个电子邮件地址,尤其是使用谷歌
- javascript - 执行 npm start 时出错。未找到预构建的二进制文件
- json - ReactJS 根据第一个下拉列表选择的值使用 ajax 填充下拉列表