在Rails中拆分记录集以在菜单中显示

时间:2019-01-18 20:18:28

标签: ruby-on-rails ruby-on-rails-5

我正在尝试将记录分成两半,以显示在菜单中。菜单有两列(col-md-4),但是我使用的记录数量为 ODD 的方法将较大的数量放在菜单的错误一侧(last_half)。我想念什么?

菜单

<div class="col-md-4">
  <ul>
    <li class="mega-menu-title">Products</li>
    <% first_half(@menu_products).each do |product| %>
      <li>
        <%= link_to product_path(product) do %>
          <span class="text-yellow"><%= product.name %></span> <%= product.subtitle %>
        <% end %>
      </li>
    <% end %>
  </ul>
</div>
<div class="col-md-4">
  <ul>
    <li class="mega-menu-title">&nbsp;</li>
    <% last_half(@menu_products).each do |product| %>
      <li>
        <%= link_to product_path(product) do %>
          <span class="text-yellow"><%= product.name %></span> <%= product.subtitle %>
        <% end %>
      </li>
    <% end %>
  </ul>
</div>
<div class="col-md-4">
  <!--- non-related code in last column in menu --->
</div>

应用程序帮助程序

def first_half(list)
  list[0...(list.length / 2)]
end

def last_half(list)
  list[(list.length / 2)...list.length]
end

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

list.first((list.length/2).ceil) # will convert 1.5 to 2

list.last((list.length/2).floor) # will convert 1.5 to 1

您遇到的问题是[7,8,9][3/2]返回8,并且3/2和{{1}中都使用了逻辑list.size / 2first_half) }。

答案 1 :(得分:0)

这就是我最终要使其正常工作的目的。我必须将长度更改为浮点数to_f,然后才能在控制台中对其进行正确测试。

def first_half(list)
  list[0...(list.length.to_f / 2).ceil]
end

def last_half(list)
  list[(list.length.to_f / 2).ceil...list.length]
end

在这两种方法上都使用.ceil然后可以进行数学运算。