Rails Devise Rolify员工角色的集合

我正在使用Devise和Rolify。

员工belongs_to User和用户has_one :employee 。 用户模型已rolify

由于Rolify,有一个名为user_roles的表。

以下代码工作正常:

  

如果我想与用户而不是员工关联,这将有效:

 :collection => User.with_role(:agent) 

现在,我希望在一个表单中有一个关联,其中包含一个具有“代理”角色的员工的选择。

以下尝试不起作用:

  Employee.user.with_role(:agent), :label_method => :employee_full_name, :label => 'Agent' %> 

上面的一个给出了这个错误:

 undefined method `user' for # 

这也不起作用:

  User.with_role(:agent).employee.id, :label_method => :employee_full_name, :label => 'Agent' %> 

什么会起作用?

谢谢您的帮助!

UPDATE1

以下内容用于显示具有关联角色的员工列表:

  

UPDATE2

因为employee.user.roles.first.name将为我提供employee.user.roles.first.name的角色名称,所以我尝试了这个:

 Employee.where('employee.user.roles.first.name = ?', 'agent') 

但是,我得到一个PG错误=

 PG::Error: ERROR: improper qualified name (too many dotted names): employee.user.roles.first.name 

在这里。

Employee.joins(:user).where(:employees => {:user_id => User.with_role(:agent)})

Employee.user.with_role(:agent)

带回代理角色的所有员工。 你的前两个问题是你在Employee上调用的has_role还没有“滚动”。

您正在尝试将实例方法“user”调用到Employee类。 正如您所说,如果Employee属于用户,您将希望在那里进行加入(我假设您在User模型中具有关系has_one:employee):

 Employee.joins(:user => :user_roles).merge(User.with_role(:agent)) 

要么

 Employee.joins(:user => { :user_roles => :roles}).merge(User.with_role(:agent))