【问题标题】:Rails - controller action name to stringRails - 控制器动作名称到字符串
【发布时间】:2010-11-17 17:05:05
【问题描述】:

我有一个 Rails 问题。

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

例如,而不是

def create
  logger.info("create")
end

我想写一些类似的东西

def create
  logger.info(this_def_name)
end

有什么方法可以得到this_def_name

【问题讨论】:

    标签: ruby-on-rails function


    【解决方案1】:

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

    或者,您可能希望考虑自定义 Rails 日志格​​式,以便格式包含操作/方法名称,而不是在您的日志消息中。

    【讨论】:

    • 你以前可以通过调用action_name来获取当前的action,我不确定它是否仍然有效,但我一直认为它比查询参数更好。
    • 澄清一下,它是“controller.action_name”或“params[:action]”,所以你可以在视图中执行 。它适用于 Rails 3.2。
    • 也可以通过params[:controller]获取控制器名称
    • action_name == 'new'(无前缀)在 Rails 3.2 中仍然适用于我
    【解决方案2】:

    mikej 的回答非常准确且很有帮助,但我还想知道如何在 rails 中获取当前方法名称。

    发现使用 self.current_method 是可能的

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

    【讨论】:

      【解决方案3】:

      Rails 2.X@controller.action_name

      Rails 3.1.Xcontroller.action_nameaction_name

      Rails 4.Xaction_name

      【讨论】:

      • 或 Rails 3.0 中的“controller.action_name”。这是在视图中访问操作名称的最佳方式。
      • 如果你想在带有块的before_filter 中使用它,请执行before_filter { |controller| ... }stackoverflow.com/questions/2669663/…
      • 仅供参考,action_name 适用于 Rails 3.2.13,而 controller.action_name 不适用。
      • rails 2.3.XX 和 @controller.action_name 不起作用,您必须为此版本仅使用 action_name。
      • 有符号版本吗?
      【解决方案4】:

      我只是做了同样的事情。我是在辅助控制器中完成的,我的代码是:

      def get_controller_name
        controller_name    
      end
      
      
      def get_action_name
        action_name   
      end
      

      这些方法将返回当前控制器和动作名称。希望对你有帮助

      【讨论】:

      • 令人困惑。为什么要将controller_name(一个返回当前控制器名称的方法)包装在另一个仅调用 controller_name的方法中?为什么不直接致电controller_name 并完成它?
      【解决方案5】:

      这个 sn-p 适用于 Rails 3

      class ReportsController < ApplicationController
      
        def summary
          logger.debug self.class.to_s + "." + self.action_name
        end
      
      end
      

      将打印

      。 . .
      ReportsController.summary
      . . .

      【讨论】:

        【解决方案6】:

        控制器名称:

        <%= controller.controller_name %>
        

        return => '用户'

        动作名称:

        <%= controller.action_name %>
        

        return => '显示'

        身份证号:

        <%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
        

        return => '23'

        【讨论】:

          【解决方案7】:

          你可以像这样获取动作名称

          控制器方法

          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 里面是什么?
          猜你喜欢
          • 2010-12-21
          • 2012-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多