1

我很困惑 redirect_to 的工作原理......在下面的代码中,我有一个无论如何都会重定向的授权方法(作为我的问题的一个例子,这在我的应用程序中有一个 if 语句)。然后在我的UsersController中,我想扩展授权方法,并在它下面添加一些逻辑。

我收到错误“ usernamenil:NilClass 的未定义方法”。(好吧, current_user 没有定义,但在此语句之前应该有一个重定向)

我的问题是,为什么在对“super”的调用无论如何都应该重定向时执行 UsersController 授权方法中的代码,并且不应该执行该代码?

class ApplicationController < ActionController::Base
  before_filter :authorize

  def authorize
    redirect_to root_path, alert: 'Not authorized'
    return false
  end

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end
end

class UsersController < ApplicationController

  def authorize
    super
    return true if current_user.username == 'admin'
  end
end
4

1 回答 1

1

redirect_to不会停止方法调用链。您只是在那里调用该方法,该方法告诉控制器发回重定向标头。如果你想让你的authorize方法在你UsersController的工作中,它需要是这样的:

super && current_user.username == 'admin'

而且您需要修改ApplicationController'sauthorize方法以使其也返回true。如果ApplicationController' 的authorize返回true并且current_user.username还返回true,那么您的 UsersController 中的这个新代码authorize也将返回true

于 2013-08-11T21:36:37.330 回答