Rails - имя действия контроллера в строку - PullRequest
144 голосов
/ 07 августа 2009

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

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

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

def create
  logger.info("create")
end

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

def create
  logger.info(this_def_name)
end

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

Ответы [ 6 ]

318 голосов
/ 25 ноября 2010

Рельсы 2.X : @controller.action_name

Рельсы 3.1.X : controller.action_name, action_name

Рельсы 4.X : action_name

33 голосов
/ 07 августа 2009

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

В качестве альтернативы вы можете захотеть настроить формат журнала Rails таким образом, чтобы имя действия / метода включалось в формат, а не в ваше сообщение журнала.

12 голосов
/ 15 марта 2013

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

<%= controller.controller_name %>

return => 'users'

название действия:

<%= controller.action_name %>

return => 'show'

Идентификатор:

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

return => '23'

6 голосов
/ 14 января 2012

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

class ReportsController < ApplicationController

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

end

напечатает

. , .
ReportsController.summary
, , ,

2 голосов
/ 07 августа 2009

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

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

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

0 голосов
/ 23 августа 2011

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

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...