我正在尝试将记录分成两半,以显示在菜单中。菜单有两列(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"> </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
答案 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 / 2
(first_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
然后可以进行数学运算。