我很困惑redirect_to如何工作......在下面的代码中,我有一个授权方法,无论如何重定向(就像我的问题的一个例子,我的应用程序中有一个if语句)。然后在我的UsersController中,我想扩展authorize方法,并在它下面添加一些逻辑。
我得到错误“未定义的方法username
为nil: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
答案 0 :(得分:2)
redirect_to
不会停止方法调用链。你只是调用那里的方法,告诉控制器发回一个重定向头。如果您希望authorize
中的UsersController
方法有效,则需要这样:
super && current_user.username == 'admin'
您需要修改ApplicationController
的{{1}}方法以返回authorize
。如果true
的{{1}}返回ApplicationController
而authorize
也返回true
,那么您的UsersController current_user.username
中的新代码也会返回{{} 1}}。