Wie kann ich eine Willkommens-E-Mail an neu registrierte Benutzer in Rails senden, die Devise verwenden?
Bin ich mit dem Entwickeln auf Schienen und ich Frage mich, ob es einen Haken oder einen filter, die ich nutzen kann um ein bisschen code zu Entwickeln, die die Benutzer-Registrierung und senden eine Willkommens-E-Mail an den Benutzer nachdem ein Konto erstellt wurde. Ohne Ersinnen, es wäre so etwas wie dieses...
respond_to do |format|
if @user.save
Notifier.welcome_email(@user).deliver # <=======
...
InformationsquelleAutor der Frage picardo | 2010-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die nächste beliebteste Antwort vorausgesetzt, Sie sind mit mit Entwickeln ist :diejenigen module, die ich nicht bin.
Ich wusste nicht, wie die anderen Lösungen, weil Sie auf die Modell-Rückrufe, die schicken immer willkommen, E-Mails auch beim anlegen seines Accounts in der Konsole oder ein admin-interface. Meine app beinhaltet die Fähigkeit, Massen-importieren von Benutzern aus einer CSV-Datei. Ich will nicht, dass meine app das senden einer E-Mail überraschung für alle 3000 von Ihnen eins nach dem anderen, ich will aber Benutzer, die selbst ein Konto erstellen, erhalten Sie eine Willkommens-E-Mail.
Die Lösung:
1) Überschreiben Entwickeln, die Anmeldungen controller:
2) Erzählen, Entwickeln Sie überschrieb seine Eintragungen controller:
InformationsquelleAutor der Antwort Arcolye
https://stackoverflow.com/a/6133991/109618 zeigt eine anständige (nicht perfekte) Antwort, aber zumindest besser als die, die ich hier zu sehen. Es überschreibt die
confirm!
Methode:Dies ist besser, weil es nicht mit callbacks. Rückrufe sind nicht toll, zu dem Ausmaß, dass Sie (1) Modelle schwer zu testen; (2) zu viel Logik in Modelle. Überbeanspruchen Sie oft bedeutet, dass Sie Verhalten in ein Modell, das gehört woanders. Für die weitere Diskussion zu diesem finden Sie unter: Vor-und Nachteile der Verwendung von callbacks für die domain-Logik in Rails.
Dem obigen Ansatz knüpft an die
confirm!
Methode, die besser ist als ein Rückruf für dieses Beispiel. Wie ein callback-obwohl, die Logik ist immer noch im Modell. 🙁 Also ich finde den Ansatz völlig zufriedenstellend.InformationsquelleAutor der Antwort David J.
Ich löste dies durch die Verwendung einer callback-Methode. Es ist nicht die saubersten Lösungen, nicht so sauber wie ein Beobachter, aber ich werde es nehmen. Ich bin glücklich, dass Mongoid implementiert die ActiveRecord-Rückrufe!
InformationsquelleAutor der Antwort picardo
Ich würde empfehlen, mit einem ActiveRecord::Observer. Die Idee mit dem Beobachter ist, erstellen Sie eine Klasse mit einem
after_save
Methode, die nennen würde, die Benachrichtigung. Alles, was Sie tun müssen ist, erstellen die Beobachter-Klasse, und ändern Sie dann die Konfiguration der Anwendung zu registrieren die Beobachter. Die Dokumentation beschreibt den Prozess Recht gut.Verwendung des observer-Musters bedeutet, dass Sie nicht zu ändern brauchen keine Logik in den controller.
InformationsquelleAutor der Antwort Rob Di Marco
Da ein
yield
wurde Hinzugefügt, um das Entwickeln von controller-Methoden eine Weile zurück, ich denke, das ist jetzt wahrscheinlich der beste Weg, es zu tun.InformationsquelleAutor der Antwort Aert