使用Ruby + ERB打印HTML列表的优雅方式

时间:2016-02-17 13:54:57

标签: 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 个答案:

答案 0 :(得分:3)

试试这个,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行,没有额外的部分,只有铁路助手。

答案 1 :(得分:1)

作为suggested by sawa,您可以使用Slim

- if items.any?
  ul.level1
    - items.each do |item|
      li.item
        a href="#"
          = item.text

Haml

- if items.any?
  %ul.level1
    - items.each do |item|
      %li.item
        %a{href: "#"}= item.text

两者都可以生成格式良好的HTML。

答案 2 :(得分:0)

这对我来说实际上看起来非常优雅,但是你可以这样做以使更清洁:

<% if items.any? %>
  <ul class="level1">
    = render items
  </ul>   
<% end %>

然后将li代码放在名为_items.html.erb的部分代码中,如下所示:

<li class="item">
  <a href="#"><%= item.text %></a>
</li>

答案 3 :(得分:0)

我会这样做:

if items.any?
  content_tag(:ul, class: 'level1') do
    items.each do |item|
      concat content_tag(:li, class: 'item', item)
    end
  end
end