0
我有這樣的models/ability.rb
Cancancan能力調試中軌控制檯失敗和RSpec
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.role? :registered
can :read Post
end
end
當我做這個軌控制檯上
#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
帖子時,我認證爲瀏覽器上的註冊用戶,我不知道爲什麼它在兩個軌道控制檯和RSpec失敗。
結束嘗試插入'byebug'只是'用戶|| =前User.new'以下,然後運行通常的rails控制檯命令。當byebug控制檯顯示時,首先檢查'user'變量('puts user'),然後檢查它的能力:'user.role? :註冊' –
@ Jay-ArPolidario我不熟悉byebug,但是當我在軌道控制檯'user.first'然後'user.role'中執行此操作時,它輸出''註冊「' –
我不知道用戶-role gem你用過或者這是你自己的實現(我指的是'user.role?:registered')即使你說'user.role'輸出「registered」,它不會自動代表'user.role? :註冊「是真實的(取決於你的實施)。如果你的Gemfile中存在byebug,請嘗試在user || = User.new'上方插入'byebug',然後保存該ability.rb文件,然後重新加載你的rails控制檯。之後,再次嘗試輸入到rails控制檯中的命令。之後,應該出現PCeb控制檯。從,那裏鍵入'user.role? :註冊',告訴我輸出 –