如何在我的Rails应用程序中的“视图”中访问“角色”?

时间:2010-09-21 20:31:47

标签: ruby-on-rails ruby

在我为帮助我学习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(这不起作用)之类的东西。

有什么建议吗?

干杯!

萨姆

4 个答案:

答案 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