通过迈克尔·哈特尔的教程,我在第11.3章和第34章“操纵微调”中遇到了一段时间。
以下是我遇到的两个错误:
ERROR [" test_should_redirect_destroy_when_not_logged_in",UsersControllerTest,2016-01-21 11:50:23 +0000] test_should_redirect_destroy_when_not_logged_in#UsersControllerTest(1453377023.37s) NoMethodError:NoMethodError:未定义的方法
admin?' for nil:NilClass app/controllers/users_controller.rb:64:in
admin_user&#39; test / controllers / users_controller_test.rb:48:在block (2 levels) in <class:UsersControllerTest>' test/controllers/users_controller_test.rb:47:in
块中&#39; app / controllers / users_controller.rb:64:在admin_user' test/controllers/users_controller_test.rb:48:in
块(2级)中&#39; test / controllers / users_controller_test.rb:47:在`block in&#39;ERROR [&#34; test_should_redirect_index_when_not_logged_in&#34;,UsersControllerTest,2016-01-21 11:50:23 +0000] test_should_redirect_index_when_not_logged_in#UsersControllerTest(1453377023.81s) ActionView :: Template :: Error:ActionView :: Template :: Error:undefined method
admin?' for nil:NilClass app/views/users/_user.html.erb:4:in
_ app_views_users__user_html_erb ___ 1165587237033555937_81443380&#39; app / views / users / index.html.erb:7:在_app_views_users_index_html_erb___836252608784755247_81359900' test/controllers/users_controller_test.rb:11:in
块中&#39; app / views / users / _user.html.erb:4:in_app_views_users__user_html_erb___1165587237033555937_81443380' app/views/users/index.html.erb:7:in
_ app_views_users_index_html_erb ___ 836252608784755247_81359900&#39; test / controllers / users_controller_test.rb:11:在`block in&#39;
经过一番研究,我能够摆脱错误并让测试通过。然而,即使在完成所有这些工作之后,我也不确定为什么我所做的改变导致测试通过。
这就是我的所作所为:
在Users_Controller.rb中,我更改了&#39; before_action&#39;对于logged_in_user来自:
before_action :logged_in_user, only: [:edit, :update]
为:
before_action :logged_in_user, only: [:index, :edit, :update, :destroy]
那摆脱了管理员?零错误。我还不确定为什么。任何人都可以解释为什么添加索引和破坏导致测试通过
答案 0 :(得分:1)
我遇到了同样的问题。
基本上,这是因为用户必须登录才能更新其个人资料或删除用户。这就是为什么:destroy和:update在过滤之前添加到logged_in_user。 logged_in_user方法现在位于ApplicationController中,UserController从该方法继承它。 MicropostControlle只需要:在该章中创建和:destroy。