【发布时间】:2010-07-13 12:26:13
【问题描述】:
我正在处理http://railstutorial.org(目前正在处理第 10.4.2 节 - 销毁用户)。
我的用户模型有一个布尔值admin 属性,并且在用户控制器中有一些使用该属性的简单代码:
def admin_user
redirect_to(root_path) unless current_user.admin?
end
RSpec 测试:
describe "as a non-signed-in user" do
it "should deny access" do
delete :destroy, :id => @user
response.should redirect_to(signin_path)
end
end
这个测试产生的错误:
“UsersController DELETE 'destroy' 中的 NoMethodError 作为非登录用户应拒绝访问” 未定义的方法“管理员?”对于 nil:NilClass
什么是 nil:NilClass?为什么我会得到这个?
编辑: j.,这可能会有所帮助:
def sign_in(user)
user.remember_me!
cookies[:remember_token] = { :value => user.remember_token,
:expires => 20.years.from_now.utc }
self.current_user = user
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
【问题讨论】:
-
看起来
current_user为零。 -
Daniel,将其更改为 @current_user 后出现同样的错误
-
检查
current_user方法。它正在返回nil。可以发一下这个方法吗? -
j.,你是对的,
current_user是零。它在sign_in初始化,此测试不会发生这种情况,因为我正在测试尚未登录的用户。我的用户控制器代码中有before_filter :admin_user, :only => :destroy,它在调用destroy 时触发admin_user。 -
对。所以拉里K的答案是要走的路。您必须使用
unless current_user && current_user.admin?测试current_user是否存在:]
标签: ruby-on-rails ruby