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