Problema con acts_as_ferret & model observer
Ho sviluppato un’applicazione che necessitava di un sistema con area utenti, completo di registrazione, pagine riservate e login. Per farlo ho utilizzato il generatore acts_as_authenticated. Tutto ha funzionato senza problemi e al primo colpo. Dopo alcuni giorni ho iniziato a sviluppare un sistema di ricerca degli utenti all’interno del pannello di controllo per l’amministratore di sistema. Per farlo ho pensato di utilizzare il Ferret unito al plugin acts_as_ferret, inserendo all’interno del modello User la seguente riga di codice num. 3:
1 5 end
Riavviando il server o la console ho ottenuto l’errore method_missing:
1 Loading development environment. 2 /opt/local/lib/ruby/gems/1.8/gems/activerecord-1.14.4/lib/active_record/base.rb:1129:in `method_missing':NoMethodError: undefined method `acts_as_ferret' for User:Class
Dopo varie prove e tentativi mi sono reso conto che togliendo la riga num. 3, lanciando la console, aggiungendo di nuovo la riga e facendo il reload dei modelli nella console con il comando reload! non ottenevo più l’errore. Mi trovavo quindi di fronte ad un problema che si presentava durante l’inizializzazione dell’ambiente. Controllando il file environment.rb mi sono reso conto che il modello User aveva un Observer impostato nel file di configurazione:
1 # Activate observers that should always be running 2 config.active_record.observers = :user_observer
Commentando la riga il plugin acts_as_ferret ha iniziato a funzionare senza problemi. Ho quindi spostato le funzioni dell’osservatore dentro il modello dello User ed eliminato dal sistema l’osservatore.
Se qualcuno ha avuto lo stesso problema e ha trovato una soluzione è pregato di scrivere un commento al post.


I’m getting this exact same problem!
I use the following in my User model.
acts_as_ferret :fields => ['login', 'email']
I also have the following in my environment.rb.
config.activerecord.observers = :user_observer
If anyone can help us with this problem it’d be great!
I fixed the issue on my end by adding the following to my User model.
Thanks for your tip fulvio!