Есть несколько вещей, которые вы можете использовать, чтобы помочь с самоанализом и отладкой:
- Установка и требование
pry
, pry-byebug
и размещение binding.pry
где-то в коде позволят вамдо step
/ next
через логику, пока вы не доберетесь до того места, где, по вашему мнению, вы должны быть - Используя метод
owner
, как отмечено в комментарии к вашему сообщению.Если у вас есть модель User
, вы можете, например, из консоли типа User.method(:_update_callbacks).owner
и увидеть, что она из ActiveRecord::Base
- Вы можете использовать метод
.source_location
, чтобы увидеть, какой файл что-тоопределено в. Например, с консоли rails я могу набрать User.method(:_update_callbacks).source_location
и увидеть, что метод определен в строке 819 файла active_support/callbacks.rb
(полный путь указан в ответе) - Если вы зналичто модуль был включен, но не смог выяснить, где можно также отредактировать гем в локальной системе, чтобы напечатать, куда он включается
Ниже выводится Bar
module Foo
def self.included(base)
puts "including..."
puts base
puts "included..."
end
end
class Bar
include Foo
end
Возможно, есть что-то лучше / чище, но это может быть полезно.
Более подробно об использовании pry, согласно моему комментарию ниже:
Учитывая, что я запустилgem install pry pry-byebug
и получите следующий пример кода:
require 'pry'
require 'pry-byebug'
module Foo
def blah
puts "in Foo"
end
end
class Bar
include Foo
def blah
binding.pry
super
puts "in Bar"
end
end
x = Bar.new
x.blah
Когда вы нажмете binding.pry
, перед super
, вы можете позвонить next
, и вы перейдете в новый файл, в котором выможно увидеть имя файла и номер строки.Вам нужно будет добавить binding.pry
в самом файле gem на вашем компьютере.bundle open <gemname>
или gem open <gemname>
должны открывать фактическую папку в вашем редакторе, и, если вы настроили pry / byebug в вашем Gemfile (если используете bundler) или устанавливаете через gem
, она должна работать.