在Rails中访问深层嵌套对象

时间:2016-11-21 14:28:04

标签: ruby-on-rails associations

在我的Rails应用程序中,我有用户,角色和权限。

协会如下:

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles, :join_table => 'users_roles'
end

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => 'users_roles'
  has_and_belongs_to_many :permissions, :join_table => 'roles_permissions'
end

class Permission < ActiveRecord::Base
  has_and_belongs_to_many :roles, :join_table => 'roles_permissions'
end

列出权限时,我想获得该权限的角色和用户数。

我能做到:

<% @permissions.each do |permission| %>
    <%= permission.roles.count %>
<% end %>

但如果我这样做:

<% @permissions.each do |permission| %>
    <%= permission.roles.users.count %>
<% end %>

我收到users未定义的错误!

在我的控制器中我有:

@permissions = Permission.includes(roles: :users)

所以也应该通过用户...

1 个答案:

答案 0 :(得分:0)

这不起作用,因为你的“permission.roles”是一个数组(或者更确切地说是一个关系),没有定义“users”方法。

没有测试,但它应该工作:

您可以使用“:through =&gt;:roles”为用户添加用户关系,然后只需调用permission.users.count