Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails不在方法内重定向_Ruby On Rails_Redirect_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails不在方法内重定向

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

我目前正在学习关于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 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!”时,当用户未登录时,不会触发重定向到,以及为什么该方法会继续执行。