2016-11-04 92 views
0

在我的Rails应用程序我有一个名为权限表,有以下栏目:组数据通过循环中值

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> 

因此,大家可以看到我经历了所有权限的基本循环来创建一个包含控制器的名字和所有的行动表行。然后,我为这些操作中的每一个创建另一行,并显示所有复选框。

我想要做的是让我的循环为每个权限控制器,然后右出具有相同控制器的权限。

回答

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