在Rails中,假设文件已经加载,如何从控制台调用此示例中的my_method
?
# some_file.rb
class MyClass < ApplicationController::Base
def my_method(args)
答案 0 :(得分:29)
另一种非常简单的方法是使用ApplicationController
本身的实例。
ApplicationController < ActionController::Base
def example
"O HAI"
end
end
然后在控制台中,您可以执行以下操作:
>> ApplicationController.new.example
这将输出以下内容:
O HAI
当然,这限制了无法访问正常请求所能提供的所有内容,例如request
对象本身。如果你需要这个,就像Patrick Klingemann建议的那样,你可以使用调试器...我个人推荐使用Pry:
对你来说这可能为时已晚,但希望将来可以帮助某人。
答案 1 :(得分: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
答案 2 :(得分:0)
这不是问题,但您也可以使用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
,并在“实时”中使用可以打印的变量(只需键入它们)!