Ответ 1
Это было turbolinks. Выключите турбовинты, и вам хорошо идти. http://blog.steveklabnik.com/posts/2013-06-25-removing-turbolinks-from-rails-4
В моем приложении Rails я использую <html id=<%= params[:controller] + "_" + params[:action] %>
в представлениях /layouts/application.html.erb.
Странно то, что значения params[:controller]
и params[:action]
всегда отстают на 1 запрос , если он находится где-то выше открытого тега <body>
.
Итак, если я нахожусь на users/1
, но я пришел из users/
, значения выше открытия <body>
будут контроллером: "users" и action: "index". Не следует ли params[:action]
"показывать"?.
Затем, если я обновляю страницу, она "догоняет" и правильно имеет контроллер: "пользователи" и действие: "показать".
Почему это происходит? Как я могу получить текущий контроллер запросов и действия? Не будут ли эти параметры обновляться до первого вызова yield
?
Это было turbolinks. Выключите турбовинты, и вам хорошо идти. http://blog.steveklabnik.com/posts/2013-06-25-removing-turbolinks-from-rails-4
Для контроллера у вас есть доступ к локальному экземпляру controller
.
Если вы хотите получить полное имя, вам нужно использовать что-то вроде controller.class.name.split("::").first
, которое даст вам UsersController
в вашем примере. Если вы просто хотите вернуть users
, вы можете использовать controller.controller_name
Для действия вы можете использовать controller.action_name
UPDATE:
Пожалуйста, попробуйте их в своем представлении и посмотрите, не отстают ли они:
<p><%= controller_name %></p>
<p><%= action_name %></p>
Я подозреваю, что они оба делегируют диспетчеру, упомянутому ранее в моем ответе, но это стоит попробовать.