我想在我看来写一个开关案例:
<% @prods.each_with_index do |prod, index|%>
<% case index %>
<% when 0 %><%= image_tag("#{prod.img}", :id => "one") %>
<% when 1 %><%= image_tag("#{prod.img}", :id => "two") %>
<% when 2 %><%= image_tag("#{prod.img}", :id => "three") %>
<% end %>
<% end %>
但它不起作用。我是否必须在每行的某处添加<% end %>
?有任何想法吗 ?
谢谢!
答案 0 :(得分:58)
您应该将第一个when
拉到与case
<% @prods.each_with_index do |prod, index|%>
<% case index
when 0 %><%= image_tag prod.img, :id => "one") %>
<% when 1 %><%= image_tag prod.img, :id => "two") %>
<% when 2 %><%= image_tag prod.img, :id => "three") %>
<% end %>
<% end %>
答案 1 :(得分:19)
不要在你的观点中加入太多逻辑。
我会添加帮助
def humanize_number(number)
humanized_numbers = {"0" => "zero", "1" => "one"}
humanized_numbers[number.to_s]
end
,您可以使用
从视图中调用它<%= image_tag("#{prod.img}", :id => humanized_number(index)) %>
答案 2 :(得分:4)
首先,您应该考虑将此功能抽象为辅助方法,以避免使用逻辑混乱您的视图。
其次,由于erb解析代码的方式,在ERB中使用case语句有点棘手。尝试改为(未经测试,因为此刻我手边没有红宝石):
<% @prods.each_with_index do |prod, index|%>
<% case index
when 0 %>
<%= image_tag("#{prod.img}", :id => "one") %>
<% when 1 %>
<%= image_tag("#{prod.img}", :id => "two") %>
<% when 2 %>
<%= image_tag("#{prod.img}", :id => "three") %>
<% end %>
<% end %>
有关详细信息,请参阅this主题。
答案 3 :(得分:3)
您还可以使用<%- case index -%>
语法:
<% @prods.each_with_index do |prod, index| %>
<%- case index -%>
<%- when 0 -%><%= image_tag prod.img, :id => "one") %>
<%# ... %>
<%- end -%>
<% end %>
答案 4 :(得分:3)
这对我来说有空白。
<i class="<%
case blog_post_type
when :pencil %>fa fa-pencil<%
when :picture %>fa fa-picture-o<%
when :film %>fa fa-film<%
when :headphones %>fa fa-headphones<%
when :quote %>fa fa-quote-right<%
when :chain %>fa fa-chain<%
end
%>"></i>
答案 5 :(得分:1)
我认为在再培训局中,你必须把条件放在线下。像这样:
<% @prods.each_with_index do |prod, index| %>
<% case index %>
<% when 0 %>
<%= image_tag("#{prod}", :id => "one") %>
<% when 1 %>
<%= image_tag("#{prod}", :id => "two") %>
<% when 2 %>
<%= image_tag("#{prod}", :id => "three") %>
<% end %>
<% end %>
Ruby支持使用then关键字的一行条件的case-whens,但我不认为ERB可以正确解析它们。例如:
case index
when 0 then "it's 0"
when 1 then "it's 1"
when 2 then "it's 2"
end