【问题标题】:Calling an ApplicationController method from console in Rails在 Rails 中从控制台调用 ApplicationController 方法
【发布时间】:2012-05-27 01:47:24
【问题描述】:

在 Rails 中,假设文件已经加载,如何从控制台调用此示例中的my_method

# some_file.rb
class MyClass < ApplicationController::Base
  def my_method(args)

【问题讨论】:

  • 这听起来很有趣。但我的第一个想法是控制器内的所有方法都由视图访问。当您访问控制台时,您正在访问 ActiveRecord 并访问您的模型及其方法.正如我所说,这将是我的第一个想法。
  • stackoverflow.com/q/151030/2355112 对同一问题有非常好的答案。

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

这并不完全是问的问题,但您也可以使用pry gem 进行调试,类似于debugger

添加到Gemfile

gem "pry"
gem "pry-remote"
gem "pry-stack_explorer"
gem "pry-debugger"

在你的方法中:

def myMethod
  binding.pry
  # some code
end

完成!

当您运行您的方法时,页面处理将冻结在binding.pry,并且 pry 将接管提示。为方法的每个新步骤输入n,并使用可以“实时”打印(只需输入)的变量!

【讨论】:

    【解决方案2】:

    另一种非常简单的方法是使用ApplicationController 本身的实例。

    ApplicationController < ActionController::Base
      def example
        "O HAI"
      end
    end
    

    然后在控制台中,您可以执行以下操作:

    >> ApplicationController.new.example
    

    这将输出以下内容:

    O HAI
    

    当然,这具有无法访问正常请求的所有内容的限制,例如request 对象本身。如果你需要这个,正如 Patrick Klingemann 建议的那样,你可以使用调试器......我个人建议使用 Pry:

    这对您来说可能为时已晚,但希望它会在未来对某人有所帮助。

    【讨论】:

    • 非常好的解决方案,帮助编写视图和控制器测试用例。
    【解决方案3】:

    使用调试器:

    在您的Gemfile 中添加:

    gem 'debugger'
    

    然后从终端:

    > bundle
    > rails s --debugger
    

    在你点击的控制器动作中:

    class WidgetsController < ApplicationController
      def index
        debugger
        @widgets = Widget.all
        respond_with @widgets
      end
    end
    

    然后将您的浏览器指向:http://localhost:3000/widgets,页面将无法完成加载。返回到您的服务器正在运行的终端,您将进入一个交互式调试会话,您可以在其中运行:my_method

    【讨论】:

    • 我实际上忘记了调试。仍然请注意,您将无法访问像那样启动服务器的方法。您需要: rails s --debugger。即使在这种情况下,您得到的唯一响应是“只需点击一个 ApplicationController 方法”......没有实际输出
    • 我在睡觉时想到了 --debugger,这很好。我不确定我是否理解您评论中的第二句话。
    • 好吧,我尝试重现 Martin 为我们设置的案例,但我得到的是该消息......我的意思是当我调用它时,我实际上无法检查方法内部发生了什么。我可能虽然做错了什么......
    • (Displaimer:这只是我的意见。)调试器已经死了,伙计。试一试pry
    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 2011-06-14
    • 2014-07-29
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多