1

我正在尝试使用 Devise 和 Cancan 在我的 Rails 应用程序中创建权限。

能力.rb:

class Ability
    include CanCan::Ability

    def initialize(user)
        if user.role ==  'admin'
            can :manage, :all
        else
            can :read, :all
        end
    end
end

用户.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :role
  # attr_accessible :title, :body


  def role(role)
    roles.include? role.to_s
  end

end

看法

            <% if can? :update, review %>
                <p><p><i><a href = '/products/<%= @product.id %>/reviews/<%= review.id %>/edit'>Edit</a>
            <% end %>

我收到一条错误消息,显示视图中此行的 nil:NilClass 的未定义方法“角色”。关于如何解决这个问题的任何建议?
我一直在尝试使用https://github.com/ryanb/cancan/wiki/Role-Based-Authorization作为指南

4

2 回答 2

0

看看康康舞宝石的创造者的这个截屏视频。它比您所关注的链接更深入地解释了您正在尝试做的事情。

于 2013-05-20T21:40:03.073 回答
0

尝试添加

user ||= User.new # guest user (not logged in)

看看这是否可以解决您的角色错误。

class Ability
    include CanCan::Ability

    user ||= User.new # guest user (not logged in)

    def initialize(user)
        if user.role ==  'admin'
            can :manage, :all
        else
            can :read, :all
        end
    end
end

这样你就可以排除用户为零。

于 2013-05-20T22:48:30.733 回答