Элегантный способ печати HTML-списков с помощью Ruby + ERB
У меня есть следующий код
<% if items.any? %>
<ul class="level1">
<% items.each do |item| %>
<li class="item">
<a href="#"><%= item.text %></a>
</li>
<% end %>
</ul>
<% end %>
Хотя это работает, мне было интересно, есть ли способ сделать его более элегантным. if
а потом each
не очень красиво...
Кто-нибудь знает более элегантный синтаксис?
4 ответа
Попробуй это, based on
:
<% content_tag(:ul, class: 'level1') do %>
<% content_tag_for(:li, items, class: "item") do |item|
<%= link_to item.text, '#' %>
<% end %>
<% end if items.any? %>
5 строк, без лишних частичек, только помощники рельсов.
Как предполагает sawa, вы можете использовать Slim:
- if items.any?
ul.level1
- items.each do |item|
li.item
a href="#"
= item.text
или хамл:
- if items.any?
%ul.level1
- items.each do |item|
%li.item
%a{href: "#"}= item.text
Оба производят красиво отформатированный HTML.
Это на самом деле выглядит уже достаточно элегантно для меня, но вы могли бы сделать это, чтобы сделать немного чище:
<% if items.any? %>
<ul class="level1">
= render items
</ul>
<% end %>
И тогда у вас есть li
код в частичном называется _items.html.erb
, вот так:
<li class="item">
<a href="#"><%= item.text %></a>
</li>
Я хотел бы пойти на что-то вроде этого:
if items.any?
content_tag(:ul, class: 'level1') do
items.each do |item|
concat content_tag(:li, class: 'item', item)
end
end
end