我有一个用于发送电子邮件的ERB模板。
Name: <%= @user.name %>
<% if @user.phone.present? %>
Phone: <%= @user.phone %>
<% end %>
Address: <%= @user.address %>
我想在Name
为空时删除Address
和Phone
之间的空白行。
返回结果
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视图模板中工作。
答案 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。
之前删除空格的方法