0

下面的代码将产生一个包含 13 个页面标题的数组(我相信它是一个数组)。对于下拉菜单,我希望标题 0-5 在其自己的 div 中,6-8 在第二个 div 中,9-12 在第三个 div 中。我在这里找不到这个确切的问题/答案。

<% @cms_site.pages.root.children.published.each. do |page| %>
  <%= link_to page.label, page.full_path %>
<% end %>

谢谢!

4

2 回答 2

1

基本上,如果您正在处理一个数组,并且每次都想从中获取完全相同的元素,那么以下是对其进行切片的方法:

# Your Array
elements = [1,2,3,4,5,6,7,8,9,10,11,12]

# This will give you three arrays inside one array. The first will be first six
# elements starting from 0, the second is 3 elements starting from 6, etc.
arrays = [ elements[0,6], elements[6,3], elements[9,3] ]

现在您可以遍历数组并重用代码来生成您想要的代码。

arrays.each do |ar|
  # Now render for each array as you please, and reuse the same code.
end
于 2013-09-21T19:24:31.587 回答
1

你有什么尝试?#each在这种情况下不是很好用。您可能希望将其分成 3 个不同的循环,如下所示:

<% @cms_site.pages.root.children.published[0,5].each do |page| %>
  <%= link_to page.label, page.full_path %>
<% end %>

<% @cms_site.pages.root.children.published[6,8].each do |page| %>
  <%= link_to page.label, page.full_path %>
<% end %>

<% @cms_site.pages.root.children.published[9,12].each do |page| %>
  <%= link_to page.label, page.full_path %>
<% end %>

编辑 您似乎遇到了一些逻辑问题,明智的做法是您至少先尝试一下。

上面的代码应该可以工作,但它并不是真正的 DRY,它可以被提取到一个辅助方法中,该方法使用迭代器的章节或可能使用不同的迭代器(例如each_with_index)并处理块中每个索引的检查。有很多方法可以按照你的要求去做。

于 2013-09-21T19:10:37.990 回答