按Rails中的循环内的值对数据进行分组

时间:2016-11-04 17:34:52

标签: ruby-on-rails

在我的rails应用程序中,我有一个名为Permissions的表,其中包含以下列:

id
name
controller
action
description

我还有一个角色,它与每个权限都有关联。

编辑角色时,我希望能够以复选框的形式选择允许该角色的哪些权限。但是,我想根据控制器名称对每个权限进行分组。

这就是我的看法:

<table>
  <% for permission in Permission.all %>
    <tr>
      <th rowspan="2"><%= permission.controller %></th>
      <% for permission in Permission.all %>
      <th style="text-align: center;"><%= permission.action %></th>
      <% end %>
    </tr>
    <tr>
      <% for permission in Permission.all %>
        <td style="text-align: center;"><%= check_box_tag "role[permission_ids][]", permission.id, @role.permissions.include?(permission) %></td>
      <% end %>
    </tr>
  <% end %>
</table>

因此,您可以看到我基本上遍历所有权限以创建包含控制器名称和所有操作的表行。然后,我创建了另一行,其中包含每个操作的所有复选框。

我想要做的是让我的循环适用于每个Permission控制器,然后将权限设置为具有相同控制器的权限。

1 个答案:

答案 0 :(得分:1)

首先,我建议避免在视图中查询,你应该在控制器中设置一些实例变量。

现在,关于你的实际问题,在控制器中执行以下操作会怎么样:

@permissions_by_controller = Permission.all.group_by(&:controller)

在视图中你会像这样迭代:

@permission_by_controller.each do |controller, permissions|
  # here permissions contains every permission for controller
  permissions.each do |permission|
    # here you will have each permission
  end
end