Rails - nombre de la acción del controlador a cadena
Tengo una pregunta sobre Rails.
¿Cómo obtengo el nombre de una acción del controlador dentro de la acción del controlador?
Por ejemplo, en lugar de
def create
logger.info("create")
end
Quiero escribir algo como
def create
logger.info(this_def_name)
end
¿Cuál es una manera de obtener this_def_name
?
6 answers
Rails 2.X: @controller.action_name
Carriles 3.1.X: controller.action_name
, action_name
Rieles 4.X: action_name
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-19 21:59:12
En el caso específico de una acción Rails (a diferencia del caso general de obtener el nombre del método actual) puede usar params[:action]
Alternativamente, es posible que desee personalizar el formato de registro de Rails para que el nombre de la acción/método se incluya en el formato en lugar de estar en su mensaje de registro.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 14:26:46
Nombre del controlador:
<%= controller.controller_name %>
Return = > 'usuarios'
Nombre de la acción:
<%= controller.action_name %>
Return = > 'show'
Id:
<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
Return = > ' 23 '
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-15 12:20:17
Este fragmento funciona para Rails 3
class ReportsController < ApplicationController
def summary
logger.debug self.class.to_s + "." + self.action_name
end
end
Se imprimirá
. . .
ReportsController.resumen
. . .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-14 12:25:12
La respuesta de Mikej fue muy precisa y útil, pero lo que también quería saber era cómo obtener el nombre del método actual en rails.
Descubrí que es posible con uno mismo.current_method
Se encuentra fácilmente en http://www.ruby-forum.com/topic/75258
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-07 14:58:39
Acabo de hacer lo mismo. Lo hice en helper controller, mi código es:
def get_controller_name
controller_name
end
def get_action_name
action_name
end
Estos métodos devolverán el contoller actual y el nombre de la acción. Espero que ayude
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-23 17:17:20