我有一個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