Использование Ruby 1.8.6/Rails 2.3.2Как узнать, что перехватывает «method_missing»
я заметил, что любой метод, который называется на любой из моих классов моделей ActiveRecord возвращается nil
вместо NoMethodError. Помимо раздражающего, это разрушает динамические искатели (find_by_name
, find_by_id
и т. Д.), Потому что они всегда возвращают nil
даже там, где существуют записи. Стандартные классы, не относящиеся к ActiveRecord :: Base, не затрагиваются.
Есть ли способ отслеживать, что перехватывает метод_missing перед ActiveRecord :: Base?
UPDATE:
После перехода на 1.8.7, я нашел (спасибо @MichaelKohl), что will_paginate плагин обработки method_missing первый. Но will_paginate существует в нашей системе (неизменной) довольно долгое время, и преступник должен быть чем-то более поздним в цепочке. Любые идеи, как увидеть, что будет дальше в этой цепочке?
ОБНОВЛЕНИЕ:
Оказалось, что существует драгоценный камень (аннотирования-2.4.0), который был обезьяны заплат ActiveRecord::Base#method_missing
как пустой метод. Удаление gem решило мою проблему. Хотя ни один из ответов на самом деле не нашел проблему, ответ на @Yanhao ближе всего, как это требуется только незначительные подправить, чтобы обнаружить нарушившие псевдонимы методы
Этот ответ оказался ближе всего, за исключением того, что мне нужно было расширить поиск до 'if id.to_s = ~/method_missing/'из-за метода aliasing – PinnyM
Это был Fabolous. +1. благодаря –