Caller & Pry

Когда у меня отказывают мозги, я берусь за отладчик. Если бы не необходимость писать код, я бы из него не вылезал вообще. И отсутствие толкового отладчика в Ruby меня до сих пор очень расстраивает.

Представим себе ситуацию: в трёх практически одинаковых контроллерах по совершенно идентичному набору параметров производятся абсолютно одинаковые действия. Результат этих действий - заполненная этими действиями форма добавления объекта в таблицу. Десять отличий между тремя вариантами найдены, вынесены в параметры, всё отлично заполняется, но: в двух случаях заполненные данные попадают куда надо, в третьем - хрррррр!

Начинаем копать всякие before_filter, фильтры в самой модели - ничего.

Отладчика, которым мне не больно и не противно было бы пользоваться, в наличии нет. (Любители IDE идут в обнимку с их IDE куда-нибудь, где java не тормозит под убунтой).

Итак, отладчика нет, а брэйкпоинт поставить надо. Аккуратно добавляем в исследуемую модель конструктор:

weird_model.rb
1
2
3
4
  def initialize(*args)
    binding.pry
    super
  end

и, как только pry выбрасывает нас в консоль, смотрим значение, возвращаемое caller.

В результате выяснилось, что второй экземпляр модели создавался во вьюхе. Баг пофикшен, блогпост написан, кому уходит луч поноса - тоже ясно.

Осталось вычистить все binding.pry и всю байду, которую добавил в процессе отладки.

Список используемой литературы

Comments