我正在使用Searchkick gem。我正在踩着它的方法来获得我需要的东西。在某些时候,我发现这个代码:
[1] pry(#<Searchkick::Query>)> s
From: /Users/borjagvo/.rvm/gems/ruby-2.2.3/gems/searchkick-1.3.4/lib/searchkick/query.rb @ line 71 Searchkick::Query#execute:
67: def execute
68: @execute ||= begin
69: begin
=> 70: response = execute_search
71: if @misspellings_below && response["hits"]["total"] < @misspellings_below
72: prepare
73: response = execute_search
74: end
75: rescue => e # TODO rescue type
76: handle_error(e)
77: end
78: handle_response(response)
79: end
80: end
如果进入execute_search
,我会转到searchkick-1.3.4/lib/searchkick/logging.rb
,其中有execute_search
定义:
From: /Users/borjagvo/.rvm/gems/ruby-2.2.3/gems/searchkick-1.3.4/lib/searchkick/logging.rb @ line 12 Searchkick::QueryWithInstrumentation#execute_search:
6: def execute_search
7: name = searchkick_klass ? "#{searchkick_klass.name} Search" : "Search"
8: event = {
9: name: name,
10: query: params
11: }
=> 12: ActiveSupport::Notifications.instrument("search.searchkick", event) do
13: super
14: end
15: end
但是,在调用execute_search
的同一文件中有另一个定义(searchkick-1.3.4/lib/searchkick/query.rb
)。这是实际被调用的方法,而不是logging.rb
中的另一个方法。为什么pry-debugger
会把我带到错误的定义?这是一个错误还是我缺少的东西?
谢谢!
答案 0 :(得分:0)
在第179行查看searchkick-1.3.4/lib/searchkick/logging.rb
,
Searchkick::Index.send(:prepend, Searchkick::IndexWithInstrumentation)
此声明使Searchkick::IndexWithInstrumentation#execute_search
优先于Searchkick::Index#execute_search
。