【发布时间】:2010-11-17 17:05:05
【问题描述】:
我有一个 Rails 问题。
如何在控制器操作中获取控制器操作的名称?
例如,而不是
def create
logger.info("create")
end
我想写一些类似的东西
def create
logger.info(this_def_name)
end
有什么方法可以得到this_def_name?
【问题讨论】:
我有一个 Rails 问题。
如何在控制器操作中获取控制器操作的名称?
例如,而不是
def create
logger.info("create")
end
我想写一些类似的东西
def create
logger.info(this_def_name)
end
有什么方法可以得到this_def_name?
【问题讨论】:
在 Rails 操作的特定情况下(与获取当前方法名称的一般情况相反),您可以使用 params[:action]
或者,您可能希望考虑自定义 Rails 日志格式,以便格式包含操作/方法名称,而不是在您的日志消息中。
【讨论】:
action_name == 'new'(无前缀)在 Rails 3.2 中仍然适用于我
mikej 的回答非常准确且很有帮助,但我还想知道如何在 rails 中获取当前方法名称。
发现使用 self.current_method 是可能的
【讨论】:
Rails 2.X:@controller.action_name
Rails 3.1.X:controller.action_name、action_name
Rails 4.X:action_name
【讨论】:
before_filter 中使用它,请执行before_filter { |controller| ... }。 stackoverflow.com/questions/2669663/…
action_name 适用于 Rails 3.2.13,而 controller.action_name 不适用。
我只是做了同样的事情。我是在辅助控制器中完成的,我的代码是:
def get_controller_name
controller_name
end
def get_action_name
action_name
end
这些方法将返回当前控制器和动作名称。希望对你有帮助
【讨论】:
controller_name(一个返回当前控制器名称的方法)包装在另一个仅调用 controller_name的方法中?为什么不直接致电controller_name 并完成它?
这个 sn-p 适用于 Rails 3
class ReportsController < ApplicationController
def summary
logger.debug self.class.to_s + "." + self.action_name
end
end
将打印
。 . .
ReportsController.summary
. . .
【讨论】:
控制器名称:
<%= controller.controller_name %>
return => '用户'
动作名称:
<%= controller.action_name %>
return => '显示'
身份证号:
<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
return => '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 版本。
【讨论】:
params[:action]此方法已被其他成员回答。你的代码块也不清楚,ab 里面是什么?