我想列出一系列项目,但我想排除一个名为“提示”的特定项目。我想的是“除非item.name =='tip'”,但不确定在哪里放置类似的东西
<ul>
<% @order.each do |item| %>
<li><h2><%= item["quantity"] %> × <%= item["name"] %></h2></li>
<% end %>
</ul>
答案 0 :(得分:1)
将unless .. end
放入<% .. %>
:
<ul>
<% @order.each do |item|
unless item['name'] == 'tip' %>
<li><h2><%= item["quantity"] %> × <%= item["name"] %></h2></li>
<% end
end %>
</ul>
示例(为简洁起见,使用item['name']
代替item.name
):
require 'erb'
class Listing
def build
@order = [
{'quantity' => 1, 'name' => 'a'},
{'quantity' => 2, 'name' => 'tip'},
{'quantity' => 3, 'name' => 'c'},
]
template = ERB.new <<-TMPL
<ul>
<% @order.each do |item|
unless item['name'] == 'tip'%>
<li><h2><%= item["quantity"] %> × <%= item["name"] %></h2></li>
<% end
end %>
</ul>
TMPL
template.result binding
end
end
puts Listing.new.build
输出:
<ul>
<li><h2>1 × a</h2></li>
<li><h2>3 × c</h2></li>
</ul>
答案 1 :(得分:0)
实现目标有很多可能性。我建议使用next
关键字,因为它使您能够忘记后一个代码中的情况,而且它不需要包含end
关键字(当您在条件下有更多代码行时,它很快就会很难看出unless … end
子句开始/结束的位置:
<ul>
<% @order.each do |item|
next if item["name"] == 'tip' %>
<li><h2><%= item["quantity"] %> × <%= item["name"] %></h2></li>
<% end %>
</ul>