Ruby Forum Rails Germany > ActiveRecord: Observer tempor är abstellen

Posted by Stefan Frank (mugwump)
on 16.05.2008 09:25
(Received via mailing list)
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
rubyonrails-ug@headflash.com
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug
Posted by Nicolai Reuschling (codeblogger)
on 16.05.2008 10:26
(Received via mailing list)
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
Posted by Stefan Frank (mugwump)
on 16.05.2008 10:54
(Received via mailing list)
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: