Rails:获取当前请求的控制器和操作

在我的Rails应用程序中,我在views / layouts / application.html.erb中使用<html id=

奇怪的是, params[:controller]params[:action]总是滞后1个请求, 如果它位于开始标记之上的任何位置。

因此,如果我在users/1 ,但我来自users/ ,则打开的值将是控制器:“users”和action:“index”。 params[:action]不应该是“show”吗?

然后,如果我刷新页面,它会“赶上”并正确地拥有控制器:“用户”和操作:“显示”。

为什么会这样? 如何获取当前请求控制器和操作? 在第一次调用yield之前,这些参数是否会更新?

对于控制器,您可以访问本地实例controller 。 如果你想要它的全名,你需要使用类似controller.class.name.split("::").first它将在你的例子中给你UsersController 。 如果您只是想要返回users ,则可以使用controller.controller_name

对于该操作,您可以使用controller.action_name

更新:

请在您的视图中尝试这些,看看它们是否也滞后:

 

<%= controller_name %>

<%= action_name %>

我怀疑他们都在我的答案中委托给前面提到的控制器,但是值得一试。

这是涡旋式的。 关掉turbolinks,你很高兴。 http://blog.steveklabnik.com/posts/2013-06-25-removing-turbolinks-from-rails-4