ActiveRecord: Observer tempor är abstellen

Hi Liste,

hier ist mein Szenario:

  • Auf einem User < ActiveRecord ist ein UserObserver <
    ActiveRecord::Observer definiert, der bei create und save jeweils
    mails generiert
  • das soll er auch in 9 von 10 Fällen tun: Nur in einem Fall möchte
    ich das generieren von E-Mails
    unterdrücken
    Kennt da jemand einen Schalter, mit dem man Observer aus- und wieder
    anstellen kann? Meine zweite Idee wäre gewesen, das über
    Anwendungslogik im Model/Observer zu machen (ein nicht persistentes
    Attribut generate_email im User), aber so eine Art
    User.deactivate_observers/activate_observers wäre einfacher…

Viele
GrüßeStefan


rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Hallo Stefan.

Die Bedingung für das Versenden von Mails ist Geschäftslogik
(Abhängigkeit
von einem Attribut?), nehme ich mal an. Daher sollte es auch im Modell
entsprechend hinterlegt sein.
Im Observer kannst Du einfach diese Bedingung überprüfen und
entsprechend
die Mail versenden oder nicht. Also in etwa so:

class UserObserver < ActiveRecord::Observer
observe :user

def after_create(user)
UserNotifier.deliver_notification(user) if user.notification?
end

def after_save(user)
UserNotifier.deliver_notification(user) if user.notification?
end
end

Viele Grüße
Nicolai

ja, das ist jetzt in dem Fall wohl wirklich sinniger. Aber der
Schalter würde mich trotzdem interessieren - wir haben das für einen
Import über das auskommentieren von config.active_record.observers
= :user_observer in der environment.rb gemacht - und dann im Eifer des
Gefechts das einkommentieren vergessen: Da ich also für den Import
nicht unbedingt Geschäftslogik schreiben wollte, wär’s da schon
nützlich, wenn ich für solch einen Import die Observer auch
programmatisch abstellen könnte…

grüßestefan

Am 16.05.2008 um 10:25 schrieb Codeblogger: