【问题标题】:How can I check if there was a redirection on another controller action?如何检查另一个控制器操作是否有重定向?
【发布时间】:2015-12-13 17:26:06
【问题描述】:

我正在从一个控制器重定向到另一个控制器。

redirect_to :controller => :controller_name, :action => :action_name

然后在我要检查是否有重定向的操作上

def action_name
  #check if there wass redirected
end

【问题讨论】:

  • 为什么重要?他们登陆了那个特定的控制器;您需要采取哪些措施来区分他们的流程和故意登陆的人?
  • 当用户在action_name控制器上重定向时,我想采取与直接访问实际控制器时不同的操作。

标签: ruby-on-rails http-redirect


【解决方案1】:

推荐的方式正如@Dimitris 在另一个答案中所描述的那样,它也可以这样做

if some_condition
  flash[:redirect] = 'some value'
  redirect_to :controller => :controller_name, :action => :action_name
end

在另一个控制器中controller_name

def action_name
  if flash[:redirect] == 'value you set' # checks if came from redirection
    # your intended code here
  end
end

由于存储在 flash 散列中的值在单个重定向中持续存在,您可以这样做,但请注意 flash.now,因为它仅在请求之后持续存在于该请求上响应 flash.now 值被刷新。 但是,您可以根据需要使 persist key: values 持久化。欲了解更多信息,请阅读 这个。http://guides.rubyonrails.org/action_controller_overview.html#the-flash

或者只是你可以使用Session 而不是flash,但你必须在工作完成后清除你自己的session。归根结底,flash 也存储在session

【讨论】:

    【解决方案2】:

    您始终可以对引用者执行特定检查,例如:

    if request.referer =~ /controller-name-here/
      # code here
    end
    

    【讨论】:

    • 这很接近但没有解决我的问题,我需要看看是否有重定向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多