Использование Ruby 1.8.6 / Rails 2.3.2
Я замечаю, что любой метод, вызываемый в любом из моих классов модели ActiveRecord, возвращает nil
вместо NoMethodError. Помимо раздражения, это нарушает динамические искатели (find_by_name
, find_by_id
и т. Д.), Потому что они всегда возвращают nil
даже там, где существуют записи. Стандартные классы, которые не являются производными от ActiveRecord :: Base, не затрагиваются.
Есть ли способ отследить, что перехватывает method_missing перед ActiveRecord :: Base?
UPDATE:
После перехода на 1.8.7 я обнаружил (благодаря @MichaelKohl), что плагин will_paginate сначала обрабатывает method_missing. Но will_paginate уже давно существует в нашей системе (без изменений), и виновник должен быть чем-то более поздним. Есть идеи, как увидеть, что будет дальше в этой цепочке?
UPDATE:
Оказалось, что был драгоценный камень (annotate-2.4.0), который обезьяна исправляла ActiveRecord::Base#method_missing
как пустой метод. Удаление драгоценного камня решило мою проблему. Хотя ни один из приведенных ответов на самом деле не нашел проблему, ответ @Yanhao был наиболее близким, так как для обнаружения оскорбительного метода с псевдонимом потребовалась лишь небольшая настройка