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

我有个关于 Rails 的问题。

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

比如说

def create
logger.info("create")
end

我想写一些像

def create
logger.info(this_def_name)
end

什么是获得 this_def_name的方法?

116925 次浏览

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

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

Mikej 的回答非常精确和有帮助,但是我还想知道的是如何获得 Rails 中的当前方法名。

发现使用 self. current _ method 是可行的

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

Rails2.X : @controller.action_name

Rails3.1.X : controller.action_nameaction_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的版本。