为什么会产生所需的输出(团队名称列表,以逗号分隔):
<% teams.each_with_index do |t,i| -%><%= ',' unless i == 0 -%>
<%= link_to t.name, team_path(t) -%>
<%- end %>
输出:一,二,三
而这不是:
<% teams.each_with_index do |t,i| -%>
<%= ',' unless i == 0 -%>
<%= link_to t.name, team_path(t) -%>
<%- end %>
输出:一,二,三
我的理解是&#34; - %&gt;&#34;应该在逗号之前压缩空格。但显然我的理解(或Rails 4.2.0)是错误的。
答案 0 :(得分:3)
不,如果trim_mode为-
,则ERB
会省略以-%>
结尾的空行。
查看第一个代码及其输出:
require 'erb'
erb = ERB.new <<_, 0, '-'
<% teams.each_with_index do |t,i| -%>
<%= ',' unless i == 0 %> # here I have removed `-`
<%= t -%>
<%- end %>
_
teams = %w( India USA Brazil )
puts erb.result binding
# >>
# >> India,
# >> USA,
# >> Brazil
现在从下面的代码中查看-
-%>
的效果:
require 'erb'
erb = ERB.new <<_, 0, '-'
<% teams.each_with_index do |t,i| -%>
<%= ',' unless i == 0 -%>
<%= t -%>
<%- end %>
_
teams = %w( India USA Brazil )
puts erb.result binding
# >> India,USA,Brazil
和
require 'erb'
erb = ERB.new <<_, 0, '-'
<% teams.each_with_index do |t,i| -%> <%= ',' unless i == 0 -%>
<%= t -%>
<%- end %>
_
teams = %w( India USA Brazil )
puts erb.result binding
# >> India ,USA ,Brazil
我认为ERB
方面有任何内容可以删除空格。摆脱这种情况的一种方法是调整 ERB模板本身。
require 'erb'
erb = ERB.new <<_, 0, '-'
<% teams.each_with_index do |t,i| -%><%= ',' unless i == 0 -%>
<%= t -%>
<%- end %>
_
teams = %w( India USA Brazil )
puts erb.result binding
# >> India,USA,Brazil
Railish方式是:
<%= teams.map { |t| link_to t.name, team_path(t) }.join(', ').html_safe %>
以下是关于第一个代码的推理:
当您为每次迭代添加<% teams.each_with_index do |t,i| -%>
时, -
将被删除。现在下一个是<%= ',' unless i == 0 -%>
,它不会在第一时间出现,但是接下来的迭代。但每次,
都没有尾随空格,因为之前的 erb 标记已被-
删除。
以下是关于第二个代码的推理:
当您为每次迭代添加<% teams.each_with_index do |t,i| -%>
时, -
将被删除。现在下一行是<%= ',' unless i == 0 -%>
,它不是第一次出现,而是下一次迭代。现在这有一些额外的缩进 space ,这会在每个 之前产生空格。 [单一空间],