抑制 ERB 模板中的空格
Suppressing spaces in ERB template
为什么这会产生所需的输出(团队名称列表,以逗号分隔):
<% 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 %>
输出:一、二、三
我的理解是“-%>”应该取消逗号前的 space。但显然我的理解(或Rails 4.2.0)是错误的。
否,如果 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
方面没有任何东西可以去除 白色 spaces。摆脱这种情况的一种方法是调整 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
最简单的方法是:
<%= teams.map { |t| link_to t.name, team_path(t) }.join(', ').html_safe %>
这是关于第一个代码的一些推理:
当您为每次迭代添加 -
时,<% teams.each_with_index do |t,i| -%>
将被删除。现在下一个是 <%= ',' unless i == 0 -%>
,第一次不会出现,但下一次迭代会出现。但是每次 ,
都会没有尾随 space,因为它之前的 erb 标签被 [=15= 删除了].
这是关于第二个代码的一些推理:
当您为每次迭代添加 -
时,<% teams.each_with_index do |t,i| -%>
将被删除。现在下一行是 <%= ',' unless i == 0 -%>
,第一次不会出现,但下一次迭代会出现。现在这有一些额外的缩进 space,这导致每个 、space =67=]。 [单身space],
为什么这会产生所需的输出(团队名称列表,以逗号分隔):
<% 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 %>
输出:一、二、三
我的理解是“-%>”应该取消逗号前的 space。但显然我的理解(或Rails 4.2.0)是错误的。
否,如果 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
方面没有任何东西可以去除 白色 spaces。摆脱这种情况的一种方法是调整 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
最简单的方法是:
<%= teams.map { |t| link_to t.name, team_path(t) }.join(', ').html_safe %>
这是关于第一个代码的一些推理:
当您为每次迭代添加-
时,<% teams.each_with_index do |t,i| -%>
将被删除。现在下一个是 <%= ',' unless i == 0 -%>
,第一次不会出现,但下一次迭代会出现。但是每次 ,
都会没有尾随 space,因为它之前的 erb 标签被 [=15= 删除了].
这是关于第二个代码的一些推理:
当您为每次迭代添加-
时,<% teams.each_with_index do |t,i| -%>
将被删除。现在下一行是 <%= ',' unless i == 0 -%>
,第一次不会出现,但下一次迭代会出现。现在这有一些额外的缩进 space,这导致每个 、space =67=]。 [单身space],