Rails - 控制器动作名称到字符串

Pav*_* K. 157 ruby-on-rails function

我有一个Rails问题.

如何在控制器操作中获取控制器操作的名称?

例如,而不是

def create
  logger.info("create")
end
Run Code Online (Sandbox Code Playgroud)

我想写点类似的东西

def create
  logger.info(this_def_name)
end
Run Code Online (Sandbox Code Playgroud)

有什么方法可以获得this_def_name

Jel*_*Cat 329

Rails 2.X:@controller.action_name

Rails 3.1.X : controller.action_name,action_name

Rails 4.X:action_name

  • 或者Rails 3.0中的'controller.action_name'.这是在视图中访问操作名称的最佳方法. (5认同)
  • 仅供参考,`action_name`适用于Rails 3.2.13,而`controller.action_name`则不适用. (3认同)
  • controller.action_name也适用于Rails 3.2 (2认同)
  • 如果你想在带有块的`before_filter`中使用它,请执行`before_filter {| controller | ......}` http://stackoverflow.com/questions/2669663/rails-before-filter-and-action-identification (2认同)
  • 仅供参考,`action_name` 在 Rails 7.0.x 中仍然有效。 (2认同)

mik*_*kej 33

在Rails操作的特定情况下(与获取当前方法名称的一般情况相反),您可以使用 params[:action]

或者,您可能希望查看自定义Rails日志格式,以便操作/方法名称包含在格式中,而不是包含在日志消息中.

  • 您曾经能够通过调用action_name来获取当前操作,我不确定它是否仍然有效,但我一直认为它比查询params更好一些. (8认同)

dum*_*umP 15

控制器名称:

<%= controller.controller_name %>
Run Code Online (Sandbox Code Playgroud)

return =>'users'

动作名称:

<%= controller.action_name %>
Run Code Online (Sandbox Code Playgroud)

return =>'show'

ID:

<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
Run Code Online (Sandbox Code Playgroud)

return =>'23'


Vla*_*roz 6

这个代码段适用于Rails 3

class ReportsController < ApplicationController

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

end
Run Code Online (Sandbox Code Playgroud)

将打印

...
ReportsController.summary
...