2012-04-06 5 views
1

Ich habe eine Engine erstellt, die grundsätzlich für alle unsere Projekte verwendet wird.Mit einem Beobachter innerhalb einer Engine

Nun, was ich tun möchte, ist ein Rückruf before_create an alle Modelle in dieser Engine.

Nach einigem Suchen fand ich heraus, dass ein Beobachter der Weg zu gehen ist.

Also, ich habe diesen Beobachter erstellt:

# app/models/baco/auth/auth_observer 

class Baco::Auth::AuthObserver < ActiveRecord::Observer 

    def before_create(record) 
    p record 
    end 

end 

Und jetzt muß ich es die Anwendung hinzuzufügen, aber natürlich in meinem Motor gibt es keine solche Datei als application.rb, so dass ich habe es in meinem Motor platziert:

# 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 

Aber ich erhalte den folgenden Fehler den Server auf Start:

.../.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) 

Antwort

2

in en Gines, anstelle von application.rb sollten Sie lib/[engine_name]/engine.rb

verwenden Wenn Sie Beobachter in einer Engine erstellen, müssen Sie es Namespace hinzufügen.

+0

Danke für Ihre Antwort, ich benutze jetzt die Engine-Datei anstelle der application.rb. Außerdem habe ich den AuthObserver wie den Rest meiner Engine im Namespace platziert. Das einzige Problem ist, wie kann ich auf den Namespace-Beobachter zeigen? Verwendung: baco_auth_observer zeigt auf BacoAuthObserver statt auf Baco :: AuthObserver. Und gerade: auth_observer funktioniert auch nicht. –

+1

Sie können beobachten Methode innerhalb Beobachter verwenden, um zu zeigen, welches Modell beobachtbar ist – MikDiet

+2

Und Sie können nicht nur Symbole in der Konfiguration zeigen. 'config.active_record.observers = Baco :: AuthObserver' ist auch akzeptabel – MikDiet

Verwandte Themen