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


160

我有一个Rails问题。

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

例如,代替

def create
  logger.info("create")
end

我想写点东西

def create
  logger.info(this_def_name)
end

有什么办法得到this_def_name

Answers:


337

Rails 2.X@controller.action_name

Rails的3.1.Xcontroller.action_nameaction_name

Rails 4.Xaction_name


5
或在Rails 3.0中使用“ controller.action_name”。这是在视图中访问操作名称的最佳方法。
emk 2011年

2
如果要在before_filter带有块的中使用它,请执行before_filter { |controller| ... }stackoverflow.com/questions/2669663/…–
本杰明·奥克斯

3
仅供参考,action_name可以在Rails 3.2.13中使用,而controller.action_name不能。
2014年

rails 2.3.XX和@ controller.action_name不起作用,对于此版本,您只能使用action_name。
mkralla11 2014年

有符号版本吗?
Bogdan Gusiev

34

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

另外,您可能想研究自定义Rails日志格式,以便操作/方法名称包含在该格式中,而不是包含在您的日志消息中。


8
您过去可以通过调用action_name来获取当前操作,但我不确定该操作是否仍然有效,但我一直认为它比查询参数要好一些。
jonnii

为了澄清起见,它是“ controller.action_name”或“ params [:action]”,因此,如果在视图中controller.action_name =='new'%>,则可以执行<%。它在Rails 3.2中对我有效。
dmonopoly

1
您也可以通过params [:controller]获得控制器名称
Ash Blue

action_name == 'new'(无前缀)在Rails 3.2中仍然对我
Brendon Muir

17

控制器名称:

<%= controller.controller_name %>

return =>'用户'

动作名称:

<%= controller.action_name %>

return =>'显示'

ID:

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

return =>'23'


7

此代码段适用于Rails 3

class ReportsController < ApplicationController

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

end

将打印

。。。
ReportsController.summary
。。。



-4

我也一样。我在辅助控制器中做到了,我的代码是:

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

这些方法将返回当前的控制器和操作名称。希望能帮助到你


39
令人困惑。为什么将wrap controller_name(这是一个返回当前控制器名称的方法)用另一个仅调用的 方法controller_name?为什么不只打电话给controller_name它做事呢?
Piersadrian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.