Ruby on rails Rails:如何获取控制器中上一个操作的名称

Ruby on rails Rails:如何获取控制器中上一个操作的名称,ruby-on-rails,Ruby On Rails,在rails中,我需要检查控制器中前一个方法的名称。例如:有方法A、B、C……等;在一个控制器中,我只想执行一些来自方法a的语句。如何为它编写条件?我看到了很多关于当前操作名和控制器名的链接,但这不是我需要的。我需要获取上一个方法的名称。提前感谢。您可以使用request.referer获取HTTP参考标头,该标头将是以前访问过的URL 然而,这并不是解决您面临的问题的理想方法,因为它不可靠,并且如果您的URL发生更改,它将中断。如果需要在应用程序中保留有关用户路径的信息,可以尝试在会话中存储变

在rails中,我需要检查控制器中前一个方法的名称。例如:有方法A、B、C……等;在一个控制器中,我只想执行一些来自方法a的语句。如何为它编写条件?我看到了很多关于当前操作名和控制器名的链接,但这不是我需要的。我需要获取上一个方法的名称。提前感谢。

您可以使用
request.referer
获取HTTP参考标头,该标头将是以前访问过的URL

然而,这并不是解决您面临的问题的理想方法,因为它不可靠,并且如果您的URL发生更改,它将中断。如果需要在应用程序中保留有关用户路径的信息,可以尝试在会话中存储变量:

您可以使用此

url = Rails.application.routes.recognize_path(request.referrer)
last_controller = url[:controller]
last_action = url[:action]

src:

来自不同操作的每个请求都是独立的。如果您真的想在请求之间传输此类数据,可能会话是一个存储的地方,但我不需要在整个会话中使用这些值。在这里,我只想知道它是从哪个行动中来的。事实上,我是rails的新手。HTTP是无状态的,所以如果您的控制器想知道在信息来自某个地方之前发生了什么操作,那么就必须先知道这些信息。它可以来自HTTP头(使用request.referer),也可以存储在会话中或请求之间的cookie中,或者您可以附加一个额外的查询字符串参数。如果我们知道您的最终目标,这可能会有所帮助。这似乎是个X/Y问题,但有没有办法知道前面的方法<代码>请求。referer提供完整的url
http://localhost:3000/example/index/1
我只需要获取
/example/index
根据此答案,您可以在URL上进行反向查找以获取控制器和操作。但同样,这有点粗糙和脆弱。如果您的应用程序依赖于跨多个请求跟踪状态,那么它应该通过在cookie、会话或数据库中持久化该信息来显式地这样做。