ruby-on-rails - 如何在 Rails View 中循环并打印多维数组?

标签 ruby-on-rails ruby arrays loops view

我正在使用 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/

相关文章:

ruby-on-rails - Bootstrap javascript 在测试中有效,但在生产中无效?

ruby - 如何在 Sinatra 上使用 Sql 和 Postgres 避免连接查询中的重复?

javascript - 比较数组中的数组

ruby-on-rails - 如何验证字符串的第一个字符不是整数?

javascript - js文件中的多行Html代码:Ruby on Rails

ruby-on-rails - Rails/Mina Gem 创建自定义任务以进行播种

ruby - 如何在正则表达式中转义所有具有特殊含义的字符

html - Ruby on Rails : simple form, 在每个输入字段旁边添加图像

c - 数组初始化 C

c - C 中数组初始化中的方括号是什么意思?