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)
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. –
Sie können beobachten Methode innerhalb Beobachter verwenden, um zu zeigen, welches Modell beobachtbar ist – MikDiet
Und Sie können nicht nur Symbole in der Konfiguration zeigen. 'config.active_record.observers = Baco :: AuthObserver' ist auch akzeptabel – MikDiet