【问题标题】:Is it possible in Rails to check whether a redirect or render had already been issued?在 Rails 中是否可以检查是否已经发出了重定向或渲染?
【发布时间】:2014-10-19 01:35:03
【问题描述】:

Ruby 2.0.2、Rails 4.0.3、巫术 0.8.5

我试图在我的代码中发出重定向,但收到错误消息表明重定向或渲染已经发出。如果是这样,我很高兴回来。但是,如果出于任何其他原因调用该方法,我想检查是否已发出重定向或渲染,如果没有,则发出它。该代码是基于巫术的身份验证。

在应用程序控制器中,我有:

  def not_authenticated
    redirect_to login_url # , :alert => "First log in to view this page."
  end

这最终会检查 current_user,如下所示:

  def current_user
    @current_user ||= @view.current_user unless @view.blank?
    begin
      @current_user ||= Associate.find(session[:user_id]) unless session[:user_id].blank?
    rescue ActiveRecord::RecordNotFound => e
      return
    end
    current_user = @current_user
  end

在救援中,我想确定是否已经发生了重定向或渲染,如果没有,我可以重定向到 login_url。当然,这意味着它是从不同的方法调用的,它就是这样。谢谢。

【问题讨论】:

  • 您的登录页面是否调用current_user?如果有,为什么?
  • @Substantial 不,它没有。除了这里涉及的内容之外,跟踪没有显示我的任何代码。巫术正在检查 current_user。这是一个短暂的情况,我没有保存跟踪,所以我没有更多。

标签: ruby-on-rails ruby redirect


【解决方案1】:

您可以在控制器中调用performed? 来检查是否已经调用了renderredirect_to

performed?               # => false
redirect_to(login_path)
performed?               # => true 

在 Rails 文档中阅读有关 performed? 的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多