Коробка переключения Rails в представлении
Я хочу написать случай переключателя на мой взгляд:
<% @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 %>
где-нибудь в каждой строке? Есть идеи?
Спасибо!
Ответы
Ответ 1
Вы должны перенести свой первый 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 %>
Ответ 2
Не ставьте много логики в свои взгляды.
я бы добавил вспомогательный
def humanize_number(number)
humanized_numbers = {"0" => "zero", "1" => "one"}
humanized_numbers[number.to_s]
end
чем вы можете вызвать его из представления с помощью
<%= image_tag("#{prod.img}", :id => humanized_number(index)) %>
Ответ 3
Во-первых, вы должны действительно подумать об абстрагировании этой функциональности в вспомогательном методе, чтобы избежать загромождения ваших представлений логикой.
Во-вторых, операторы case немного сложны для использования в ERB, из-за того, как 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 %>
Подробнее см. этот.
Ответ 4
Вы также можете использовать синтаксис <%- case index -%>
:
<% @prods.each_with_index do |prod, index| %>
<%- case index -%>
<%- when 0 -%><%= image_tag prod.img, :id => "one") %>
<%# ... %>
<%- end -%>
<% end %>
Ответ 5
Это помогло мне с пробелами.
<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>
Ответ 6
Я думаю, что в ERB вам нужно будет установить условия в строке под окнами. Вот так:
<% @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 поддерживает case-whens с одним условием строки с ключевым словом then, но я не думаю, что ERB может их правильно разобрать. Пример:
case index
when 0 then "it 0"
when 1 then "it 1"
when 2 then "it 2"
end