Ответ 1
Rails 2.X: @controller.action_name
Rails 3.1.X: controller.action_name
, action_name
Rails 4.X: action_name
У меня есть вопрос Rails.
Как получить имя действия контроллера внутри действия контроллера?
Например, вместо
def create
logger.info("create")
end
Я хочу написать что-то вроде
def create
logger.info(this_def_name)
end
Каков способ получить this_def_name
?
Rails 2.X: @controller.action_name
Rails 3.1.X: controller.action_name
, action_name
Rails 4.X: action_name
В конкретном случае действия Rails (в отличие от общего случая получения имени текущего метода) вы можете использовать params[:action]
В качестве альтернативы вам может потребоваться настроить формат журнала Rails, чтобы имя action/method было включено в формат, а не в сообщении журнала.
имя контроллера:
<%= controller.controller_name %>
return = > 'users'
имя действия:
<%= controller.action_name %>
return = > 'show'
ID:
<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
return = > '23'
Этот фрагмент работает для Rails 3
class ReportsController < ApplicationController
def summary
logger.debug self.class.to_s + "." + self.action_name
end
end
напечатает
.,.
ReportsController.summary
,,
Ответ mikej был очень точным и полезным, но я также хотел знать, как получить текущее имя метода в рельсах.
узнал, что это возможно с self.current_method
легко найти на http://www.ruby-forum.com/topic/75258
Я просто сделал то же самое. Я сделал это в вспомогательном контроллере, мой код:
def get_controller_name
controller_name
end
def get_action_name
action_name
end
Эти методы возвращают текущее имя и имя действия. Надеюсь, что это поможет.