2012-04-06 14 views
1

私はすべてのプロジェクトで基本的に使用されるエンジンを作成しました。エンジン内のオブザーバーを使用する

ここでは、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) 

答えて

2

あなたが使用するべきであるapplication.rbの代わりにlib/[engine_name]/engine.rb

また、エンジンの中にオブザーバーを作成する場合は、それを名前空間にする必要があります。

+0

返信いただきありがとうございます。私は現在、application.rbの代わりにエンジンファイルを使用しています。また、AuthObserverを他のエンジンのように名前空間に配置しました。問題は、名前空間のオブザーバーをどのように指し示すことができるのですか?使用:baco_auth_observerはBaco :: AuthObserverの代わりにBacoAuthObserverを指します。そしてちょうど:auth_observerも動作していません。 –

+1

オブザーバ内で 'observe'メソッドを使用して、どのモデルが観測可能であるかを指すことができます – MikDiet

+2

そして、シンボルだけでなく、設定を指すことができます。 'config.active_record.observers = Baco :: AuthObserver'も受け入れられます – MikDiet

関連する問題