如何找出函数被覆盖的位置?

时间:2017-01-05 16:33:26

标签: ruby-on-rails ruby

在我的Rails项目中,我看到link_to中已覆盖config/initializers/extend_action_view.rb

module ActionView
  module Helpers
    def link_to(name, options = {}, html_options = nil)
    ...
    end
  end
end

我在linux grep -r 'def link_to' *中找到了着名的命令行。

我的问题是:有没有办法在rails console找到它?是否有本机功能rails或ruby可以给我们文件的路径?类似.ancestors的对象。

ps:我的IDE是vi

2 个答案:

答案 0 :(得分:2)

如果您使用pry gem,则可以使用Method#source_location找到它。 在视图中传递binding.pry并进行渲染。然后写:

method(:link_to).source_location
=> ["path_to_helper.rb", 124]

答案 1 :(得分:1)

$ gem

中使用pry命令

在代码中插入binding.pry,设置断点,然后在Pry命令行中使用$命令

[1] pry(#<AdminController>)> $ Person.find

From: /Users/joe_example/.rvm/gems/ruby-1.9.3-p551/gems/composite_primary_keys-8.1.0/lib/composite_primary_keys/core.rb @ line 21:
Owner: ActiveRecord::Core::ClassMethods
Visibility: public
Number of lines: 38

def find(*ids) # :nodoc:
  # We don't have cache keys for this stuff yet
  return super unless ids.length == 1
  ...

$命令确实值得美元。它显示了定义方法的位置以及源代码。