2010-11-21 4 views
1

Ich verwende rails3 mit acl9 für die Autorisierung. Ich versuche, ARel und die Rails-Art zu fragen.Schienen 3 und Acl9: Finden Sie alle Themen für ein bestimmtes Objekt/Rolle

Ich habe einen Benutzer, die zu einer Firma gehört, und der Benutzer hat eine bestimmte Rolle (acl9 bietet die Sanitär) über die Firma. Wie kann ich alle Benutzer von einer gegebenen Firma bekommen, die eine bestimmte Rolle haben? Ich möchte die Ergebnisse im DB filtern, nicht in der Anwendung filtern.

Ich möchte etwas wie folgt aus:

# 
# authorizable_id = 1 is the company's id 
# 'collaborator' and '1' would be params for my scope 
# 
select * from users 
inner join roles_users 
on roles_users.user_id = users.id 
inner join roles 
on roles_users.role_id = roles.id 
where roles.authorizable_type='Company' 
and roles.authorizable_id = 1 
and roles.name = 'collaborator'; 

#usage with scope 
@collaborators = User.with_role_and_company('collaborator',current_user.company) 

Ich weiß rails3 eine SQL-api hat, aber ich komme aus einem Java/Grails Ort, und die meisten der ORMs Ich benutze ORM api haben (ich nehme an DataMapper funktioniert so, aber ich benutze plain rails3).

Antwort

1

fand ich heraus:

class << self 
    def with_role_in_company(role, company) 
     joins(:roles). 
      where(:roles => {:authorizable_type => 'Company'}). 
      where(:roles => {:authorizable_id => company.id}). 
      where(:roles => {:name => role}) 
    end 
    end 
0

ich diese Funktion auch in acl9 1.2 hinzugefügt, so können Sie jetzt einfach tun:

company.users :collaborator 
Verwandte Themen