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))