2016-11-21 4 views
0

In meiner Rails-App habe ich Benutzer, Rollen und Berechtigungen.Zugriff auf tief verschachtelte Objekte in Rails

Die Verbände sind wie folgt:

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 

Wenn Berechtigungen Auflistung möchte ich für die Erlaubnis, die Anzahl der Rollen und Benutzer erhalten.

kann ich tun:

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

Aber wenn ich tun:

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

ich einen Fehler, dass users nicht definiert ist!

In meinem Controller habe ich:

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

So sollte auch durch den Benutzer Strang ziehen ...

+0

Sie brauchen Fügen Sie die Zuordnung zum Benutzermodell hinzu, um die Anzahl der Benutzer für diese Berechtigung zu ermitteln –

Antwort

0

Dies kann nicht funktionieren, weil Ihr "permission.roles" ist ein Array (oder genauer eine Relation), ist keine "user" -Methode definiert.

ohne es getestet, aber es sollte funktionieren:

Sie könnten einen Benutzer Bezug auf die Erlaubnis, mit add „: durch =>: Rollen“ und dann rufen Sie einfach an permission.users.count

Verwandte Themen