我将在接近尾声时阅读Michael Hartl Rails Tutorial,但仍然坚持参见清单12.29中的测试。我得到的两个错误是:
[BsonSerializer(typeof(MyCustomSerializer))]
public string Property1 { get; set; }
[BsonSerializer(typeof(MyCustomSerializer))]
public string Property2 { get; set; }
users_controller_test.rb
test_should_redirect_following_when_not_logged_in#UsersControllerTest (1432024588.37s) ActionView::Template::Error: ActionView::Template::Error: undefined method `admin?' for nil:NilClass
test_should_redirect_followers_when_not_logged_in#UsersControllerTest (1432024588.39s)ActionView::Template::Error: ActionView::Template::Error: undefined method `admin?' for nil:NilClass
sessions_helper.rb
test "should redirect following when not logged in" do
get :following, id: @user
assert_redirected_to login_url
end
test "should redirect followers when not logged in" do
get :followers, id: @user
assert_redirected_to login_url
end
先谢谢,如果我需要发布更多代码,请告诉我,因为我是Rails的新手。
更新#2,users_controller.rb
# Returns true if the given user is the current user.
def current_user?(user)
user == current_user
end
# Returns the current logged-in user (if any).
def current_user
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
elsif (user_id = cookies.signed[:user_id])
user = User.find_by(id: user_id)
if user && user.authenticated?(:remember, cookies[:remember_token])
log_in user
@current_user = user
end
end
end
答案 0 :(得分:2)
错误发生在您的视图代码中 - 您调用@user.admin?
或current_user.admin?
之类的地方。根据您的测试标题判断,如果用户未登录(例如@user
/ current_user
为nil
),则会检查该用户是否已重定向。
检查您的观看代码是否有.admin?
的来电 - 当您没有用户时,该通话就会中断。
有几个修复程序,其中一个是尝试.admin?
调用,例如:
current_user.try(:admin?)
:try
将在:admin?
上调用给定方法(current_user
),但如果nil
没有current_user
,则会默默返回admin?
方法(在这种情况下它没有,因为current_user
是nil
)。
答案 1 :(得分:1)
当遇到同样的错误并且发疯时,遇到了这个。
我的错误非常简单,我不小心有了旧版本的
before_action :logged_in_user,
在我的UsersController中
看起来像这样,必须只是偶然添加它,而不是双重检查和复制和粘贴的数量钉它:
before_action :logged_in_user, only: [:index, :edit, :update, :destroy,
:following, :followers]
before_action :logged_in_user, only: [:index, :edit, :update, :destroy]
删除了第二个,所以只有这个,错误消失了:
before_action :logged_in_user, only: [:index, :edit, :update, :destroy,
:following, :followers]