我有一个Rails问题。Rails - 控制器对字符串的动作名称
如何在控制器操作中获取控制器操作的名称?
例如,而不是
def create
logger.info("create")
end
我想写类似
def create
logger.info(this_def_name)
end
有什么办法让this_def_name
?
我有一个Rails问题。Rails - 控制器对字符串的动作名称
如何在控制器操作中获取控制器操作的名称?
例如,而不是
def create
logger.info("create")
end
我想写类似
def create
logger.info(this_def_name)
end
有什么办法让this_def_name
?
Rails的2.X容易被发现:@controller.action_name
Rails的3.1.X:controller.action_name
,action_name
Rails 4.X:action_name
在Rails动作的特定情况下(而不是获取当前方法的名称一般情况下),可以使用params[:action]
或者你可能要考虑定制Rails日志格式,以便在行动/方法名称包含在格式中,而不是它在您的日志消息中。
mikej的回答非常精确和有帮助,但我也想知道的是如何在rails中获取当前方法名称。
发现它可能与self.current_method
我刚刚也这么做。我在帮助控制器中完成了,我的代码是:
def get_controller_name
controller_name
end
def get_action_name
action_name
end
这些方法将返回当前的控制器和操作名称。希望它可以帮助
令人困惑。为什么在另一个只调用*'controller_name'的方法中封装'controller_name',它是一个返回当前控制器名称的方法?为什么不直接调用'controller_name'并完成它呢? – piersadrian 2012-07-21 23:32:47
这个片段的作品为Rails 3
class ReportsController < ApplicationController
def summary
logger.debug self.class.to_s + "." + self.action_name
end
end
将打印
。 。 。
ReportsController.summary
。 。 。
控制器名称:
<%= controller.controller_name %>
回报=> '用户'
动作名称:
<%= controller.action_name %>
返回> '节目'
ID:
<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
收益率=>“23”
或Rails 3.0中的'controller.action_name'。这是在视图中访问操作名称的最佳方式。 – emk 2011-02-01 19:59:59
controller.action_name在Rails 3.2中也可以使用 – 2012-02-15 03:22:14
如果你想在一个带有块的'before_filter'中使用它,可以执行'before_filter {| controller | ''。 http://stackoverflow.com/questions/2669663/rails-before-filter-and-action-identification – 2013-02-05 17:43:36