Utilizzando rubino 1.8.6/Rails 2.3.2Come scoprire che cosa sta intercettando 'method_missing'
Sto notando che qualsiasi metodo chiamato su uno dei miei classi del modello ActiveRecord sta tornando nil
al posto di un NoMethodError. Oltre a infastidire, questo è rompere i cercatori dinamici (find_by_name
, find_by_id
, ecc.) Perché restituiscono sempre nil
anche dove esistono i record. Le classi standard che non derivano da ActiveRecord :: Base non sono interessate.
C'è un modo per rintracciare cosa intercetta method_missing prima di ActiveRecord :: Base?
UPDATE:
Dopo il passaggio alla 1.8.7, ho trovato (grazie a @MichaelKohl) che il plug will_paginate sta gestendo method_missing prima. Ma will_paginate è rimasto nel nostro sistema (inalterato) per un po 'di tempo e il colpevole deve essere qualcosa più avanti nella catena. Qualche idea su come vedere cosa viene dopo in questa catena?
UPDATE:
Si è scoperto che c'era una gemma (annotare-2.4.0), che era scimmia patching ActiveRecord::Base#method_missing
come metodo vuoto. La disinstallazione della gemma ha risolto il mio problema. Anche se nessuna delle risposte fornite effettivamente trovato il problema, la risposta @Yanhao si avvicinava di più in quanto necessario solo un tweak minore per scoprire il metodo incriminato alias
Questa risposta è stata la più vicina tranne che avevo bisogno di espandere la ricerca a 'if id.to_s = ~/method_missing/'a causa del metodo aliasing – PinnyM
Questo era Fabolous. +1. Grazie –