Rails在视图中切换案例

时间:2012-03-07 14:31:03

标签: ruby-on-rails view switch-statement

我想在我看来写一个开关案例:

<% @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 %>?有任何想法吗 ? 谢谢!

6 个答案:

答案 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