我试图找到在调用Item.where(dst: "video")
时调用的方法(item是mongoid模型)。在源代码中查找时,我发现criteria.rb是可以访问的地方但是,def where
调用super然后Origin::Selectable
(包含在Origin::Queryable
中)定义它:
def where(criterion = nil)
criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion)
end
现在,我要看看
js_query
和expr_query
在哪里,看看他们在做什么等等。浏览所有这些源代码和模块,找到所有方法,然后试图找出它是如何工作的,这会变得很困难。
有没有更好的方法来做这个过程,找出事情是如何工作的?
最佳答案
如果您知道接收者的类(比如A
)和方法名(比如foo
),则可以执行以下操作:
A.instance_method(:foo).source_location
在大多数情况下,它会给出文件名和行号如果它返回
nil
,那么它很可能是一个c定义的方法,它不依赖于其他ruby方法。另一种方法是使用
pry
gem或method_source
gem。