在我为帮助我学习Ruby(和)Rails而构建的Rails 3应用程序中,我对“roles / roles_users / users”表格感到有些困惑。
我有Devise和CanCan,我想“访问”这些角色。
现在,我有三个角色:
管理员
工作人员
客户
在数据库中,我有这些表(以及其他一些表):
角色(表)
id => 1 || name =>管理员
id => 2 || name =>工作人员
id => 3 || name =>客户
roles_users(表)
role_id => 1 || user_id => 1
role_id => 2 || user_id => 2
role_id => 3 || user_id => 3
用户(表)
USER1
用户2
user3
所以现在我有三个用户。用户#1是“admin”,用户#2是“staff”,User#3是“client”。
在“views / admin / users / show.html.erb”中,我想显示每个用户的“角色”,然后还允许管理员更改它。一旦我能够显示角色,我想我可以设置它,以便管理员可以更改它。
事情是......我对可用于显示每个用户角色的变量/名称感到困惑。我可以轻松访问user.first_name或user.address之类的东西,但我不确定如何访问user.role(这不起作用)之类的东西。
有什么建议吗?
干杯!
萨姆
答案 0 :(得分:1)
我猜你可以做@user.roles
。问题是,我猜每个用户只有一个角色(虽然它是一个hmabtm关系),所以你可以在你的用户模型中创建:
def role
roles.first
end
def role=(role_id)
self.roles = [Role.find(role_id)]
end
答案 1 :(得分:1)
CanCan的惯例是创建role?
方法。我知道你每个用户只有一个角色,但如果你以后决定每个用户有多个角色,这对你有用:
def role?(role)
!!self.roles.find_by_name(role.to_s)
end
!!
是一种将任何东西强制转换为布尔值的方法。
这样您就可以通过以下方式检查授权:
if user.role? :editor
can :manage, Foo
end
阅读:如果用户的角色为editor
,那么他们可以管理Foo模型。
答案 2 :(得分:0)
@user.roles # returns a collection of roles for the given user
答案 3 :(得分:0)
尝试: @ user.roles.first.name