在引擎中使用观察者

我创建了一个基本上用于我们所有项目的引擎。

现在我要做的是为此Engine中的所有模型添加一个before_create回调。

经过一番搜索,我发现观察者是可行的方法。

所以,我创建了这个观察者:

 # app/models/baco/auth/auth_observer class Baco::Auth::AuthObserver < ActiveRecord::Observer def before_create( record ) p record end end 

现在我需要将它添加到应用程序中,但当然在我的引擎中没有application.rb这样的文件,所以我把它放在我的引擎中:

 # lib/baco/auth/engine.rb require 'rails' require 'devise' module Baco module Auth class Engine < Rails::Engine engine_name 'baco_auth' config.active_record.observers = :auth_observer end end end 

但是在启动服务器时出现以下错误:

 .../.rvm/gems/ruby-1.9.3-p125/gems/activesupport-3.2.1/lib/active_support/inflector/methods.rb:229:in `block in constantize': uninitialized constant AuthObserver (NameError) 

在引擎中,您应该使用lib/[engine_name]/engine.rb而不是application.rb

此外,如果在引擎内创建观察者,则需要对其进行命名。