Ruby on rails Rails不在方法内重定向
我目前正在学习关于Rails 4的教程,但由于未知原因,我无法让示例正常工作(Rails 4实际运行,第7章)。在某个时候,我创建了一个require_sign!方法和当前用户在application\u controller.rb中。它们看起来像这样:Ruby on rails Rails不在方法内重定向,ruby-on-rails,redirect,ruby-on-rails-4,Ruby On Rails,Redirect,Ruby On Rails 4,我目前正在学习关于Rails 4的教程,但由于未知原因,我无法让示例正常工作(Rails 4实际运行,第7章)。在某个时候,我创建了一个require_sign!方法和当前用户在application\u controller.rb中。它们看起来像这样: private def require_signin! if current_user.nil? flash[:error] = "You need to sign in or sign up before cont
private
def require_signin!
if current_user.nil?
flash[:error] = "You need to sign in or sign up before continuing."
redirect_to signin_url
end
end
helper_method :require_signin!
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
def authorize_admin!
require_signin!
unless current_user.admin?
flash[:alert] = "You must be an admin to do that."
redirect_to root_path
end
end
到目前为止,一切顺利。当我添加一个before\u操作:require\u sign!在控制器的顶部,如果用户为null或会话[:user_id]为null,它将正确重定向到登录页面
然后,我在下面添加了一个新方法require_sign!名为authorize_admin!。我的用户模型中有一个管理员布尔字段。方法如下所示:
private
def require_signin!
if current_user.nil?
flash[:error] = "You need to sign in or sign up before continuing."
redirect_to signin_url
end
end
helper_method :require_signin!
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
def authorize_admin!
require_signin!
unless current_user.admin?
flash[:alert] = "You must be an admin to do that."
redirect_to root_path
end
end
在我的一个控制器的顶部,我添加了:
before_action :authorize_admin!
问题在于:如果我以非管理员用户身份登录,我会被正确重定向到根路径。如果我根本没有登录,则会出现以下错误:
undefined method `admin?' for nil:NilClass
----
require_signin!
**unless current_user.admin?**
flash[:alert] = "You must be an admin to do that."
redirect_to root_path
end
----
由于某些原因,当方法进入require\u sign时,我不会被重定向到登录页面!方法。我知道它正确地进入了这个方法,因为我在它里面放了一个“fail”来检查它是否被调用
谢谢你的帮助,这让我快发疯了。更改
,除非当前的\u user.admin?
更改为
if current_user && !current_user.admin?
确保用户登录。我确实尝试过。这有两个问题:1)出现错误“此操作中多次调用渲染和/或重定向”,2)即使有效,用户也无法重定向到登录页面。更新的答案有效!非常感谢。尽管如此,我还是不明白为什么在输入“require_sign!”时,当用户未登录时,不会触发重定向到,以及为什么该方法会继续执行。