撬 - 调试没有踩正确的方法

时间:2016-09-23 07:28:13

标签: ruby-on-rails ruby debugging pry

我正在使用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会把我带到错误的定义?这是一个错误还是我缺少的东西?

谢谢!

1 个答案:

答案 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