ERB模板删除尾随线

时间:2011-01-08 07:20:48

标签: ruby-on-rails erb

我有一个用于发送电子邮件的ERB模板。

Name: <%= @user.name %>
<% if @user.phone.present? %>
Phone: <%= @user.phone %>
<% end %>
Address: <%= @user.address %>

我想在Name为空时删除AddressPhone之间的空白行。

返回结果

Name: John Miller 

Address: X124 Dummy Lane, Dummy City, CA

预期结果

Name: John Miller 
Address: X124 Dummy Lane, Dummy City, CA

我尝试使用<%--%>标记(删除尾随的新行)但没有成功。

Name: <%= @user.name %>
<%- if @user.phone.present? -%>
Phone: <%= @user.phone %>
<%- end -%>
Address: <%= @user.address -%>

如何解决此问题?

PS:我在Rails 2.3.8上。

注1

现在,我正在使用ruby hackery解决这个问题。

帮助方法:

def display_fields(names, user)
  names.collect do |name| 
    value = user.send(name)
    "#{name}: #{value}" unless value.blank?
  end.compact.join("\n")
end

查看代码

<%= display_fields(["Name", "Phone", "Address"], @user) %>

但这看起来很笨重。我有兴趣知道是否有人能够让<%--%>在ERB视图模板中工作。

6 个答案:

答案 0 :(得分:25)

要启用修剪模式,您必须使用' - '作为第三个参数

来实例化ERB对象
ERB.new(template, nil, '-')

答案 1 :(得分:9)

我必须将willmcneilly,RobinBrouwer和fbo的答案结合起来。

启用修剪模式

ERB.new(File.read(filename), nil, '-')

更改为 - %&gt;

<% $things.each do |thing| -%>
  <object name="<%= thing.name %>">
    <type><%= thing.name %></type>
  </object>
<% end -%>

最后,从dos转换为unix。我在Vim中使用了以下内容:

:set fileformat=unix
:w

答案 2 :(得分:5)

试试这个:

Name: <%= @user.name %>
<% unless @user.phone.blank? -%>Phone: <%= @user.phone %><% end -%>
Address: <%= @user.address %>

此外,不知道这是否有效:

Name: <%= @user.name %>
<%= "Phone: #{@user.phone}" if @user.phone.present? -%>
Address: <%= @user.address %>

如果这也不起作用,这应该可以解决问题:

Name: <%= @user.name %><%= "\nPhone: #{@user.phone}" if @user.phone.present? %>
Address: <%= @user.address %>

答案 3 :(得分:5)

根据最新的rails docs(http://guides.rubyonrails.org/v2.3.8/configuring.html#configuring-action-view):

  

ActionView :: TemplateHandlers :: ERB.erb_trim_mode给出了ERB使用的修剪模式。它默认为' - '。

他们引用了ERB文档(http://www.ruby-doc.org/stdlib-2.0.0/libdoc/erb/rdoc/ERB.html#method-c-new

If trim_mode is passed a String containing one or more of the following modifiers, ERB will adjust its code generation as listed:
%  enables Ruby code processing for lines beginning with %
<> omit newline for lines starting with <% and ending in %>
>  omit newline for lines ending in %>
-  omit blank lines ending in -%>

所以你需要做的就是在你的结束erb标签中加上破折号,如-%>。如果您看到意外结果,则可能需要使用修剪模式。

答案 4 :(得分:4)

我遇到了同样的问题,

这是由%>

之后的空格字符引起的

也许它会帮助你

弗朗索瓦

答案 5 :(得分:3)

使用'&gt;'选项,您将省略以%&gt;

结尾的行的换行符
ERB.new(template, nil, '>')

这意味着您可以将Ruby代码包装在&lt; %%&gt;内标签,像往常一样。 不幸的是,我还没有找到一种在开始&lt;%tag。

之前删除空格的方法