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

时间:2014-01-28 07:46:06

标签: ruby-on-rails ruby-on-rails-4

在我的Rails应用程序中,我在views / layouts / application.html.erb中使用<html id=<%= params[:controller] + "_" + params[:action] %>

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

因此,如果我在users/1,但我来自users/,则开放<body>以上的值将为控制器:“users”和action:“index”。 params[:action]不应该“显示”吗?

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

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

2 个答案:

答案 0 :(得分:44)

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

对于您可以使用controller.action_name

的操作

更新:

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

<p><%= controller_name %></p>
<p><%= action_name %></p>

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

答案 1 :(得分:2)

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