错误未定义的方法“管理员?” for nil:NilClass - 似乎简单行不通

Error Undefined method `admin?' for nil:NilClass - Seems simple won't work

我有一个小问题,我花了大约一个小时尝试解决。看起来很简单。

如果有人进入用户索引视图,我希望他们重定向到 root url。除非他们是管理员。

任何修复方法的线索?

提前感谢您的帮助。

我有一个简单的测试

  test "should redirect index when not logged in" do
    get :index
    assert_redirected_to login_url
  end

但是我收到这个错误。

  1) Error:
UsersControllerTest#test_should_redirect_index_when_not_logged_in:
NoMethodError: undefined method `admin?' for nil:NilClass
    app/controllers/users_controller.rb:78:in `admin_user'
    test/controllers/users_controller_test.rb:42:in `block in <class:UsersControllerTest>'

我在用户控制器中的admin_user方法如下

# Confirms an admin user.
def admin_user
  redirect_to(root_url) unless current_user.admin?
end

current_user 为零。

所以像这样:

redirect_to(root_url) unless current_user && current_user.admin?

您需要检查您的用户是否已经登录。如果他没有登录,current_user 将是 nil。您可能也想在 admin_user 方法中检查一下。

redirect_to(root_url) unless current_user.try(:admin?)

使用rails try方法添加所有对象。

redirect_to(root_url) unless current_user.try(:admin?)