2012-03-07 10 views
20

में मामला स्विच मैं मेरे विचार में एक स्विच मामले लिखना चाहते हैं:रेल दृश्य

<% @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 %> जोड़ना है? कोई विचार ? धन्यवाद!

उत्तर

54

साथ देखने से यह कॉल कर सकते हैं आप 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 %> 
4

सबसे पहले, आपको तर्क के साथ अपने विचारों को अव्यवस्थित करने से बचने के लिए वास्तव में इस कार्यक्षमता को एक सहायक विधि में सारणीकरण के बारे में सोचना चाहिए।

दूसरा, केस स्टेटमेंट ईआरबी में उपयोग करने के लिए थोड़ा मुश्किल है, जिस तरह से erb कोड को पार करता है। बजाय का प्रयास करें (परीक्षण नहीं किया, जैसा कि मैंने एक गहरे लाल रंग का हाथ के पास इस समय की जरूरत नहीं है):

<% @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 धागा देखें।

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 %> 

रूबी तो कीवर्ड के साथ एक पंक्ति की स्थिति के साथ मामला-whens का समर्थन करता है, लेकिन मुझे नहीं लगता ERB उन्हें सही ढंग से पार्स कर सकते है। पूर्व:

case index 
    when 0 then "it's 0" 
    when 1 then "it's 1" 
    when 2 then "it's 2" 
end 
17

अपने विचारों में ज्यादा तर्क न डालें।

मैं एक सहायक

def humanize_number(number) 
    humanized_numbers = {"0" => "zero", "1" => "one"} 
    humanized_numbers[number.to_s] 
end 

से आप

<%= image_tag("#{prod.img}", :id => humanized_number(index)) %> 
+1

हाँ यह भी बेहतर है! धन्यवाद ! – Maxxx

+0

+1 वास्तव में व्याख्यान देने के बजाय, एक सहायक विधि प्रदान करने के लिए +1! –

3

रूप में एक ही ब्लॉक में अपना पहला when खींच चाहिए जोड़ना होगा आप <%- case index -%> सिंटैक्स का भी उपयोग कर सकते हैं:

<% @prods.each_with_index do |prod, index| %> 
    <%- case index -%> 
    <%- when 0 -%><%= image_tag prod.img, :id => "one") %> 
    <%# ... %> 
    <%- end -%> 
<% end %> 
2

इससे मेरे लिए व्हाइटस्पेस में मदद मिली।

<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> 
संबंधित मुद्दे