Когда у меня отказывают мозги, я берусь за отладчик.
Если бы не необходимость писать код, я бы из него не вылезал вообще.
И отсутствие толкового отладчика в Ruby меня до сих пор очень расстраивает.
Представим себе ситуацию: в трёх практически одинаковых контроллерах по
совершенно идентичному набору параметров производятся абсолютно одинаковые
действия. Результат этих действий - заполненная этими действиями форма добавления
объекта в таблицу. Десять отличий между тремя вариантами найдены, вынесены в параметры,
всё отлично заполняется, но: в двух случаях заполненные данные попадают куда надо,
в третьем - хрррррр!
Начинаем копать всякие before_filter, фильтры в самой модели - ничего.
Отладчика, которым мне не больно и не противно было бы пользоваться, в наличии нет.
(Любители IDE идут в обнимку с их IDE куда-нибудь, где java не тормозит под убунтой).
Итак, отладчика нет, а брэйкпоинт поставить надо. Аккуратно добавляем в исследуемую модель
конструктор:
def initialize(*args) |
и, как только pry выбрасывает нас в консоль, смотрим значение, возвращаемое caller.
В результате выяснилось, что второй экземпляр модели создавался во вьюхе.
Баг пофикшен, блогпост написан, кому уходит луч поноса - тоже ясно.
Осталось вычистить все binding.pry и всю байду, которую добавил в процессе отладки.