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? :注册',告诉我输出 –