每个用户都有一个角色。
用户:name :role_id
角色:name
user.rb
belongs_to :role
role.rb
has_many :users
ability.rb - 我希望这可以通过belongs_to / has_many关系工作 -
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
if user.role.name == "Admin"
can :manage, :all
end
end
end
这是nilClass错误,但是如果失败了,为什么我使用以下内容获取“在UsersController#index中的ActiveRecord :: RecordNotFound - 找不到没有ID的角色”?
我以具有role_id:4的用户身份登录,这是名称的索引:“Admin”。
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
if user.role_id = nil
user.role_id = 5
end
if Role.find(user.role_id).name == "Admin"
can :manage, :all
end
end
end
我认为在理解rails模型之间的关系时,我有一个非常重要的错误。
答案 0 :(得分:0)
在你的app/models/user.rb
中你应该有关系:
has_and_belongs_to_many :roles
同样的事情app/models/user.rb
:
has_and_belongs_to_many :users
请检查您的数据库中是否有roles
和roles_users
个表。
然后,您应该检查roles
表中您想要的角色。
您可以在应用程序文件夹中rails console
执行此操作:
1.8.7-p371 :005 > Role.find(:all, :select => 'id, name')
=> [#<Role id: 1, name: "super_admin">, #
<Role id: 2, name: "owner">, #
<Role id: 3, name: "admin">]
然后在app/models/ability.rb
中你可以使用:
if user.role? :super_admin
can :manage, :all
end
您可以在cancan wiki中找到更多信息: https://github.com/ryanb/cancan/wiki