Rails: получить контроллер и действие текущего запроса

В моем приложении 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?

Ответы

Ответ 2

Для контроллера у вас есть доступ к локальному экземпляру controller. Если вы хотите получить полное имя, вам нужно использовать что-то вроде controller.class.name.split("::").first, которое даст вам UsersController в вашем примере. Если вы просто хотите вернуть users, вы можете использовать controller.controller_name

Для действия вы можете использовать controller.action_name

UPDATE:

Пожалуйста, попробуйте их в своем представлении и посмотрите, не отстают ли они:

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

Я подозреваю, что они оба делегируют диспетчеру, упомянутому ранее в моем ответе, но это стоит попробовать.