为什么更改before_action摆脱了这种"未定义的方法' admin' "错误(第11章Hartl教程)

时间:2016-02-18 01:22:44

标签: ruby-on-rails railstutorial.org

通过迈克尔·哈特尔的教程,我在第11.3章和第34章“操纵微调”中遇到了一段时间。

以下是我遇到的两个错误:

  

ERROR [&#34; test_should_redirect_destroy_when_not_logged_in&#34;,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]

那摆脱了管理员?零错误。我还不确定为什么。任何人都可以解释为什么添加索引和破坏导致测试通过

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。

基本上,这是因为用户必须登录才能更新其个人资料或删除用户。这就是为什么:destroy和:update在过滤之前添加到logged_in_user。 logged_in_user方法现在位于ApplicationController中,UserController从该方法继承它。 MicropostControlle只需要:在该章中创建和:destroy。