Rails - имя действия контроллера для строки

У меня есть вопрос Rails.

Как получить имя действия контроллера внутри действия контроллера?

Например, вместо

def create
  logger.info("create")
end

Я хочу написать что-то вроде

def create
  logger.info(this_def_name)
end

Каков способ получить this_def_name?

Ответ 1

Rails 2.X: @controller.action_name

Rails 3.1.X: controller.action_name, action_name

Rails 4.X: action_name

Ответ 2

В конкретном случае действия Rails (в отличие от общего случая получения имени текущего метода) вы можете использовать params[:action]

В качестве альтернативы вам может потребоваться настроить формат журнала Rails, чтобы имя action/method было включено в формат, а не в сообщении журнала.

Ответ 3

имя контроллера:

<%= controller.controller_name %>

return = > 'users'

имя действия:

<%= controller.action_name %>

return = > 'show'

ID:

<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>

return = > '23'

Ответ 4

Этот фрагмент работает для Rails 3

class ReportsController < ApplicationController

  def summary
    logger.debug self.class.to_s + "." + self.action_name
  end

end

напечатает

.,.
ReportsController.summary
,,

Ответ 5

Ответ mikej был очень точным и полезным, но я также хотел знать, как получить текущее имя метода в рельсах.

узнал, что это возможно с self.current_method

легко найти на http://www.ruby-forum.com/topic/75258

Ответ 6

Я просто сделал то же самое. Я сделал это в вспомогательном контроллере, мой код:

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

Эти методы возвращают текущее имя и имя действия. Надеюсь, что это поможет.