我试图找到调用Item.where(dst: "video")
时调用的方法(Item是Mongoid模型)。查看源代码,我看到criteria.rb是可以去的地方。但是,def where
称为超级。然后Origin::Selectable
(包含在Origin::Queryable
内)定义它:
def where(criterion = nil)
criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion)
end
现在,我必须看看js_query
和expr_query
的位置,看看他们做了什么等等。
通过所有这些源代码和模块,找到所有方法,然后试图弄清楚它是如何工作的。
有没有更好的方法来完成这个过程以找出工作原理?
答案 0 :(得分:2)
您可能需要改善编辑器体验。有三种非凡的能力(除了Eclipse/Aptana,NetBeans等许多其他能力之外):
[c|e]tags
。根据您的选择,您可以使用 Ctrl + 单击或使用首选键盘快捷键快速浏览代码。
这里也提到了这个问题的次数:https://stackoverflow.com/search?q=best+ruby+editor
希望它有所帮助。
答案 1 :(得分:1)
如果您知道接收者的类别(比如说A
)和方法名称(比如foo
),那么您可以这样做:
A.instance_method(:foo).source_location
在大多数情况下,这将给出文件名和行号。如果返回nil
,则它可能是C定义的方法,不依赖于其他Ruby方法。
另一种方法是使用pry
gem或method_source
gem。