我正在使用 ancestry gem,并想将整棵树打印到表格中。我正在处理的对象是组,所以它看起来像这样。
Group A
|__ Group A 1
|__ Group A 1 A
|__ Group A 2
|__ Group A 2 A
|__ Group A 2 B
Group B
Group C
|__ Group C 1
通常,我会创建一个方法并在循环中调用自身,但这似乎会破坏 MVC 约定。在 View 中,我将如何输出对象/哈希?
注意:Ancestry 具有将 ActiveModel 组转换为散列的方法,因此这是一个选项,而不是遍历 ActiveModel 对象本身。
最佳答案
没有理由不能在 View 中使用循环,而这正是您想要的方式:
<% @groups.each do |group| %>
<!-- Render stuff -->
<% group.groups.each do |child| %>
<!-- Render child stuff -->
<% end %>
<% end %>
如果您改用局部变量来执行此操作,可能会更容易管理:
# view.html.erb
<% render partial: 'group', collection: @groups, as: :group %>
# _group.html.erb
<!-- Render stuff -->
<% render partial: 'first_child', collection: group.groups, as: :group %>
查看 Rendering Collections Layouts and Rendering 上的 Rails 指南部分了解更多信息。
编辑:如果您需要处理未知级别的嵌套,partials 也可以在这里工作。如果需要,您甚至可以追踪深度。假设您想使用嵌套的 ul
元素显示它们:
# _group.html.erb
<% content_tag :li, class: "depth-#{depth}" do %>
<!-- Any output needed for the group itself -->
<% unless group.group.empty? %>
<ul>
<%= render partial "group", collection: group.groups, as: :group,
locals: { depth: depth+1 } %>
</ul>
<% end %>
<% end %>
# In your view file
<ul>
<% render partial "group", collection: @groups, as: :group,
locals: { depth: 0 } %>
</ul>
关于ruby-on-rails - 如何在 Rails View 中循环并打印多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18369251/