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)
返信いただきありがとうございます。私は現在、application.rbの代わりにエンジンファイルを使用しています。また、AuthObserverを他のエンジンのように名前空間に配置しました。問題は、名前空間のオブザーバーをどのように指し示すことができるのですか?使用:baco_auth_observerはBaco :: AuthObserverの代わりにBacoAuthObserverを指します。そしてちょうど:auth_observerも動作していません。 –
オブザーバ内で 'observe'メソッドを使用して、どのモデルが観測可能であるかを指すことができます – MikDiet
そして、シンボルだけでなく、設定を指すことができます。 'config.active_record.observers = Baco :: AuthObserver'も受け入れられます – MikDiet