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?

Author: februaryInk, 2009-08-07

6 answers

Rails 2.X: @controller.action_name

Carriles 3.1.X: controller.action_name, action_name

Rieles 4.X: action_name

 301
Author: JellicleCat,
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.

 33
Author: mikej,
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 '

 10
Author: dumP,
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
. . .

 6
Author: Vladimir Kroz,
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

 2
Author: Pavel K.,
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

 -4
Author: Rushabh Ajay Hathi,
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