2012-05-20 27 views
10

在Rails中,假設文件已經加載,可以如何從控制檯調用my_method這個例子?從Rails中的控制檯調用ApplicationController方法

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

這實際上聽起來很有趣。但我首先想到的是,控制器內的所有方法都可以被視圖訪問。當您訪問控制檯時,您正在訪問ActiveRecord並訪問您的模型及其方法。正如我所說,這將是我的第一個想法。 – Daniel

+0

http://stackoverflow.com/q/151030/2355112對於同樣的問題有非常好的答案。 – oozzal

回答

27

另一個非常簡單的方法是使用ApplicationController本身的實例。

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

然後在控制檯中,您可以執行以下操作:

>> ApplicationController.new.example 

這將輸出如下:

O HAI 

這當然,有沒有訪問的限制適用於正常請求的所有內容,例如request對象本身。如果你需要這個,因爲帕特里克·克林格曼建議,你可以使用調試器...我個人推薦使用撬:

這可能是太遲了你,但希望它能幫助未來的人。

+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

+0

我其實忘了調試。請注意,您將無法訪問啓動您的服務器的方法。你需要:rails s --debugger.And甚至在這種情況下,你得到的唯一的答案是「只需打一個ApplicationController方法」...沒有實際的輸出 – Daniel

+0

我想到了--debugger,當我去睡覺時,好點子。我不確定我是否理解你評論中的第二句話。 –

+0

好吧,我試圖複製馬丁爲我們設置的情況,但我得到的是那個消息......我的意思是我實際上不能檢查方法內部發生了什麼,當我調用它時。雖然我可能會做錯事。 – Daniel

0

這不完全是問題所在,但您也可以使用pry寶石進行調試,與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,並在「實時」中使用可打印的變量(只需鍵入它們)來玩耍!

相關問題