在我的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
之前,这些参数是否会更新?
答案 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