メソッドの祖先全体を見るには...
irbセッションでこれを定義します。
class Object
def method_ancestry(method_name)
method_ancestors = []
method = method(method_name)
while method
method_ancestors << [method.owner, method.source_location]
method = method.super_method
end
method_ancestors
end
end
たとえば、Rails コンソールでは、次のことができます。
# assuming User is an ActiveRecord class
User.new.method_ancestry(:save)
=> [[ActiveRecord::Suppressor,
["/Users/me/.gem/ruby/2.3.1/gems/activerecord-5.0.1/lib/active_record/suppressor.rb", 40]],
[ActiveRecord::Transactions,
["/Users/me/.gem/ruby/2.3.1/gems/activerecord-5.0.1/lib/active_record/transactions.rb", 317]],
[ActiveRecord::AttributeMethods::Dirty,
["/Users/me/.gem/ruby/2.3.1/gems/activerecord-5.0.1/lib/active_record/attribute_methods/dirty.rb",
21]],
[ActiveRecord::Validations,
["/Users/me/.gem/ruby/2.3.1/gems/activerecord-5.0.1/lib/active_record/validations.rb", 43]],
[ActiveRecord::Persistence,
["/Users/me/.gem/ruby/2.3.1/gems/activerecord-5.0.1/lib/active_record/persistence.rb", 124]]]
superこのリストだけでは、リストされているメソッド定義のいずれかが実際に呼び出しているのか、継承された定義を単にオーバーライドしているのかはわかりません。しかしsuper、それらの 1 つに表示されている場合は、リストの次のものに移動します。
~/.irbrcこれを頻繁に使用する場合は、またはに入れることができます~/.pryrc。