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

时间:2009-08-07 14:09:33

标签: ruby-on-rails function

我有一个Rails问题。

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

例如,而不是

def create
  logger.info("create")
end

我想写点像

def create
  logger.info(this_def_name)
end

获取this_def_name的方式是什么?

7 个答案:

答案 0 :(得分:316)

Rails 2.X @controller.action_name

Rails 3.1.X controller.action_nameaction_name

Rails 4.X action_name

答案 1 :(得分:33)

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

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

答案 2 :(得分:12)

控制器名称:

<%= controller.controller_name %>

return =&gt; '用户'

动作名称:

<%= controller.action_name %>

return =&gt; '显示'

ID:

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

return =&gt; '23'

答案 3 :(得分:6)

此代码段适用于Rails 3

class ReportsController < ApplicationController

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

end

将打印

  

。 。 。
  ReportsController.summary
  。 。 。

答案 4 :(得分:2)

mikej的答案非常精确且有用,但我还想知道的是如何在rails中获取当前的方法名称。

发现可以使用self.current_method

很容易找到http://www.ruby-forum.com/topic/75258

答案 5 :(得分:-1)

您可以像这样获取操作名称

控制器方法

def abc

   params[:action] #you can store this any variable or you can directly compare them.

   ab == params[:action] 
 
end

这支持从 rails 4 到 rails 6 版本。

答案 6 :(得分:-4)

我也是这么做的。我是在辅助控制器中完成的,我的代码是:

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

这些方法将返回当前控制器和操作名称。希望它有所帮助