【问题标题】:How can I access "roles" in "views" in my Rails app?如何在 Rails 应用程序的“视图”中访问“角色”?
【发布时间】:2010-09-21 20:31:46
【问题描述】:

在我为帮助我在(和)Rails 上学习 Ruby 而构建的 Rails 3 应用程序中,我对“roles/roles_users/users”表感到有些困惑。

我有 Devise 和 CanCan,我想“访问”这些角色。

现在,我有三个角色:

管理员
员工
客户

在数据库中,我有这些表(以及其他一些表):

角色(表格)
id => 1 ||名称 => 管理员
id => 2 ||姓名 => 员工
id => 3 ||名称 => 客户

roles_users(表)
角色 ID => 1 ||用户 ID => 1
角色 ID => 2 ||用户 ID => 2
角色 ID => 3 || user_id => 3

用户(表)
用户1
用户2
用户3

所以现在我有三个用户。用户 #1 是“管理员”,用户 #2 是“员工”,用户 #3 是“客户”。

在“views/admin/users/show.html.erb”中,我想显示每个用户的“角色”,然后还允许管理员更改它。一旦我能够显示角色,我想我可以设置它以便管理员可以更改它。

问题是......我有点困惑我可以使用哪个变量/名称来显示每个用户的角色。我可以轻松访问 user.first_name 或 user.address 之类的东西,但我不确定如何访问 user.role 之类的东西(这不起作用)。

有什么建议吗?

干杯!

山姆

【问题讨论】:

  • 您可以为您在models/users.rb 和models/roles.rb 中定义的关系添加代码吗?
  • 在 models/roles.rb 我有:has_and_belongs_to_many :users 在 models/users.rb 我有:has_and_belongs_to_many :roles
  • 在rails控制台中,是否可以通过@user.roles访问用户的角色通过指定HABTM关系,你已经说过一个用户有很多角色,而不仅仅是1个。因此rails会生成@ user.roles,而不是 @user.role 作为我相信的助手。
  • 是的,你是对的。对于这个应用,我实际上并不需要用户拥有多个角色,所以我可以改变它。

标签: ruby-on-rails ruby


【解决方案1】:

我猜你可以做到@user.roles。问题是,我猜每个用户只有一个角色(虽然它是一个 hmabtm 关系),所以你可以在你的用户模型中创建:

def role
  roles.first
end

def role=(role_id)
  self.roles = [Role.find(role_id)]
end

【讨论】:

  • 谢谢!我添加了它,现在我得到了这个:#<0x1076ed3b0>
【解决方案2】:

CanCan 的约定是创建一个role? 方法。我知道您每个用户只有一个角色,但如果您以后决定为每个用户拥有多个角色,这将适用于您:

def role?(role)
  !!self.roles.find_by_name(role.to_s)
end

!! 是一种将任何内容强制转换为布尔值的方法。

这样您可以通过以下方式检查授权:

if user.role? :editor
  can :manage, Foo
end

阅读:如果用户具有editor 的角色,那么他们可以管理 Foo 模型。

【讨论】:

    【解决方案3】:
    @user.roles # returns a collection of roles for the given user
    

    【讨论】:

      【解决方案4】:

      尝试: @user.roles.first.name

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 2011-07-11
        • 2011-08-24
        • 1970-01-01
        • 2012-12-27
        相关资源
        最近更新 更多