2015-02-09 61 views
1

我試圖找到調用Item.where(dst: "video")時調用的方法(Item是Mongoid模型)。在源代碼中查看,我看到criteria.rb是要去的地方。但是,def where調用超級。然後Origin::Selectable(包括內部Origin::Queryable)定義它:在Ruby中高效地瀏覽源代碼

def where(criterion = nil) 
    criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion) 
end 

現在,我會看到js_queryexpr_query的,看看他們做什麼等等。

通過所有這些源代碼和模塊,找到所有的方法,然後試圖弄清楚它是如何工作的。

有沒有更好的方法來完成這個過程,找出事情的工作方式?

+1

歡迎來到Stack Overflow。您需要幫助瀏覽代碼,但是您沒有說明您的編輯器使用了什麼,Stack Overflow不是要求編輯提供建議的地方,儘管現有的遺留問題確實提供了建議。請描述你正在努力做得更好,所以我們可以幫助你。另外,雖然你提到了一些Mongoid調用,但這並不會使問題成爲「寶石」或「mongoid」問題。請使用專門用於問題的標籤,而不是與其遠程關聯的標籤。 – 2015-02-09 15:40:12

+0

感謝您的審查。我使用Sublime Text 3,但我的問題不是集中在編輯器上,而是更廣泛。 – borjagvo 2015-02-09 17:24:35

+0

那麼,更廣泛的問題會讓你更難以幫助你。到目前爲止,你可以通過兩個截然不同的答案來說明,我們無法真正知道你在問什麼,這使得你的問題不適合網站。請嘗試對其進行重新說明,並更清楚地表明你正在嘗試做什麼。 – 2015-02-09 19:10:39

回答

1

如果你知道類的接收器(比如說A)和方法名(比如foo),那麼你可以做:

A.instance_method(:foo).source_location 

這將使文件名,並且在大多數情況下,行號。如果它返回nil,那麼它很可能是一個C定義的方法,它不依賴於其他Ruby方法。

另一種方法是使用pry寶石或method_source寶石。

2

您可能需要改進編輯器體驗。有三個顯着的能力(除了其他許多類似的Eclipse/AptanaNetBeans等):

取決於你自己的選擇產生通過你的代碼快速導航的能力或者。 Ctrl + 點擊或與您的首選鍵盤快捷鍵。

在這裏,這個問題被問及次數也是如此:https://stackoverflow.com/search?q=best+ruby+editor

希望它有幫助。

+0

雖然這是試圖提供幫助,但重要的是要提到許多具有相同功能的編輯器,並且在Ruby社區中也有同樣的表現。在網站上的其他問題上進行了比較和推薦,因此應該引用這些頁面。 – 2015-02-09 19:06:11

+0

@theTinMan感謝您的提示;更新。 – mudasobwa 2015-02-10 06:08:41