我有个关于 Rails 的问题。
如何在控制器操作中获取控制器操作的名称?
比如说
def create logger.info("create") end
我想写一些像
def create logger.info(this_def_name) end
什么是获得 this_def_name的方法?
this_def_name
在 Rails 操作的特定情况下(与获取当前方法名称的一般情况相反) ,可以使用 params[:action]
params[:action]
或者,您可能希望定制 Rails 日志格式,以便将操作/方法名称包含在格式中,而不是放在日志消息中。
Mikej 的回答非常精确和有帮助,但是我还想知道的是如何获得 Rails 中的当前方法名。
发现使用 self. current _ method 是可行的
在 http://www.ruby-forum.com/topic/75258很容易找到
Rails2.X : @controller.action_name
@controller.action_name
Rails3.1.X : controller.action_name,action_name
controller.action_name
action_name
Rails4.X : action_name
我在 helper 控制器中也是这样做的,我的代码是:
def get_controller_name controller_name end def get_action_name action_name end
这些方法将返回当前控制器和操作名称。希望有所帮助
这个代码片段适用于 Rails 3
class ReportsController < ApplicationController def summary logger.debug self.class.to_s + "." + self.action_name end end
将打印
. . . ReportsController 总结 . . < br/>
控制器名称:
<%= controller.controller_name %>
返回 = >’用户’
行动名称:
<%= controller.action_name %>
返回 = >’显示’
身份证:
<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
返回 = >’23’
您可以像这样获得动作名称
控制器方法
def abc params[:action] #you can store this any variable or you can directly compare them. ab == params[:action] end
这支持从 Rails 4到 Rails 6的版本。