Cancancan 能力调试在 rails 控制台和 Rspec 中失败

Cancancan ability debugging fails in rails console and Rspec

我在models/ability.rb

中有这个
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new   

    if user.role? :registered
      can :read Post
    end

  end

当我在 rails 控制台上执行此操作时

#this returns a user with a role: "registered" attribute   
user = User.first
post = Post.first
ability = Ability.new(user)

### This returns false ###
ability.can?(:read, post)
#=> false

我为测试该能力而编写的规范也失败了,而我希望它通过。

describe User, :type => :model do
  let(:post) {create(:post)}
  describe "abilities" do
    subject(:ability){Ability.new(user)}
    let(:user){nil}

     context "when is a registered user" do

       ## the default value for the role attribute in the user factory is "registered"
       let(:user) {create(:user)}
       it {is_expected.to be_able_to :read, post}
     end
  end
end

当我在浏览器上被认证为注册用户时,我可以访问和阅读 /posts/posts/:id 中的帖子,我不知道为什么它在 rails 中都失败了] 控制台和 rspec.

按照我们的discussion,我们得出的结论是问题要么是

  1. Rails 没有加载技能 class,或者
  2. 某处的代码以某种方式覆盖了能力 class。

workaround-solution是手动加载能力文件,在application.rb

末尾追加如下内容
require "#{Rails.root}/app/models/ability.rb"