我有一个Rails问题。
如何在控制器操作中获取控制器操作的名称?
例如,而不是
def create
logger.info("create")
end
我想写点像
def create
logger.info(this_def_name)
end
获取this_def_name
的方式是什么?
答案 0 :(得分:316)
Rails 2.X :@controller.action_name
Rails 3.1.X :controller.action_name
,action_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
答案 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
这些方法将返回当前控制器和操作名称。希望它有所帮助