Ich arbeite an einer Rails 4.2-App, die wiederkehrende wöchentliche Ereignisse enthält, für die sich Benutzer registrieren. Sie erhalten vor jeder Veranstaltung (wöchentlich) eine Erinnerungs-E-Mail. Ich möchte einen Abmeldelink mit einem Klick auf der E-Mail. Dies scheint eine übliche Aufgabe zu sein, aber ich habe keine gute aktuelle Lösung gefunden. Einige Richtungen, die ich gesehen habe, sind die Verwendung von MessageVerifier, das neu in Rails 4.1 war und es nicht erforderlich macht, eine Token-Zeichenfolge zu speichern, mit der in der Datenbank verglichen werden kann. Was sind die Schritte, um dies zu erreichen? Ich habe ein Benutzermodell und ein Ereignismodell. E-Mails werden an registrierte Benutzer gesendet, die sich für das wiederkehrende Ereignis angemeldet haben.
Hier ist die Lösung, die ich für einen Abmelde-Link für normale E-Mails an Abonnenten erhalten habe. Es verwendet MessageVerifier.
In meinem Event-Controller habe ich eine send_notice-Aktion, die die E-Mail sendet. Ich werde eine Variable für den Abmelde-Link erstellen und an den Mailer übergeben.
%Vor%Dies nimmt die Benutzer-ID und erzeugt eine signierte und codierte String-Variable @ unsubscribe. Der Nachrichtenüberprüfer wandelt die Benutzer-ID in eine nicht entzifferbare Zeichenkette um, indem er sie mit Ihrer secret_key_base (in der Datei config / secrets.yml) und dem Namen, den Sie der Nachricht geben, vermischt (in diesem Fall rufe ich sie auf: unsubscribe aber es könnte ein beliebiger Name sein) als was sie ein Salz nennen und es durch einen Algorithmus namens SHA1 laufen lassen. Stellen Sie sicher, dass Ihre secret_key_base sicher bleibt. Verwenden Sie Umgebungsvariablen, um den Wert in der Produktion zu speichern. In der letzten Zeile übergeben wir die Variable @unsubscribe zusammen mit @event und @user Variablen an den Mailer.
Beachten Sie, dass das Argument (id: @unsubscribe) hinzugefügt wurde. Dadurch wird die codierte Benutzer-ID an das Ende der URL angehängt, beginnend mit einem? in einem so genannten Abfrageparameter.
Fügen Sie eine Route hinzu, die den Benutzer auf eine Abmeldeseite führt. Dann eine andere Route für, wenn sie die Abbestellung abschicken.
%Vor% Ich habe mich dafür entschieden, dem Benutzermodell ein Boolesches Feld (true / false) für Subskriptionen hinzuzufügen, aber Sie können es auf viele verschiedene Arten einrichten. rails g migration AddSubscriptionToUsers subscription:boolean
.
Ich habe beschlossen, einen Einstellungs-Controller mit einer Abmeldung und einer Aktualisierungsaktion hinzuzufügen. Erzeuge den Controller rails g controller Settings unsubscribe
.
Wenn der Benutzer auf den Abmelde-Link in der E-Mail klickt, wird er zur URL weitergeleitet und die verschlüsselte Benutzer-ID an die URL nach dem Fragezeichen als Abfrageparameter angehängt. Hier ist ein Beispiel dafür, wie der Link aussehen würde: Ссылка .
Die Abmeldungsaktion verwendet MessageVerifier, um den ID-Parameter zu entfernen und zu decodieren, um die tatsächliche Benutzer-ID abzurufen und diesen zu verwenden, um den Benutzer zu finden und der Variablen @user zuzuweisen.
Fügen Sie die Abmeldeseite hinzu, die ein Formular zum Abbrechen des Abonnements enthält.
%Vor%Es gibt verschiedene Möglichkeiten, dies einzurichten. Hier verwende ich den form_for-Helfer, der mit einem hinzugefügten Argument von id: @ user.id an den settings_update_path weitergeleitet wird. Dadurch wird die Benutzer-ID an die URL angehängt, wenn das Formular als Abfrageparameter gesendet wird. Die Update-Aktion liest sie, um den Benutzer zu finden und das Subscription-Feld auf "false" zu setzen.
Eine wirklich gute Option könnte Michael Hartls Rails Tutorial App sein. In Kapitel 12 implementiert er ein System, in dem Benutzer anderen Benutzern Microports folgen können (im Grunde Tweets, Twitter-Stil). Sie müssten lediglich die Modellvalidierungen (Benutzer- und Ereignismodelle) einrichten und ein Beziehungsmodell & amp; Regler. Das Beziehungsmodell und der Controller behandeln den gesamten folgenden Mechanismus. Im Wesentlichen verfügt der Controller nur über Aktionen zum Erstellen und Löschen, und die Aktion create dient dazu, die Beziehung zu erstellen, und die Option destroy, um sie zu löschen. Um das Abmeldungsszenario zu bearbeiten, können Sie einfach rails den Löschpfad in der ActionMailer-Vorlage rendern. Der Link oben gibt Ihnen Schritt für Schritt Anweisungen, aber wenn Sie sich verirren, zögern Sie nicht, mir Fragen zu stellen.
Ich arbeite an einer Rails 4.2-App, die wiederkehrende wöchentliche Ereignisse enthält, für die sich Benutzer registrieren. Sie erhalten vor jeder Veranstaltung (wöchentlich) eine Erinnerungs-E-Mail. Ich möchte einen Abmeldelink mit einem Klick auf der E-Mail. Dies scheint eine übliche Aufgabe zu sein, aber ich habe keine gute aktuelle Lösung gefunden. Einige Richtungen, die ich gesehen habe, sind die Verwendung von MessageVerifier, das neu in Rails 4.1 war und es nicht erforderlich macht, eine Token-Zeichenfolge zu speichern, mit der in der Datenbank verglichen werden kann. Was sind die Schritte, um dies zu erreichen? Ich habe ein Benutzermodell und ein Ereignismodell. E-Mails werden an registrierte Benutzer gesendet, die sich für das wiederkehrende Ereignis angemeldet haben.
Eine wirklich gute Option könnte Michael Hartls Rails Tutorial App sein. In Kapitel 12 implementiert er ein System, in dem Benutzer anderen Benutzern Microports folgen können (im Grunde Tweets, Twitter-Stil). Sie müssten lediglich die Modellvalidierungen (Benutzer- und Ereignismodelle) einrichten und ein Beziehungsmodell & amp; Regler. Das Beziehungsmodell und der Controller behandeln den gesamten folgenden Mechanismus. Im Wesentlichen verfügt der Controller nur über Aktionen zum Erstellen und Löschen, und die Aktion create dient dazu, die Beziehung zu erstellen, und die Option destroy, um sie zu löschen. Um das Abmeldungsszenario zu bearbeiten, können Sie einfach rails den Löschpfad in der ActionMailer-Vorlage rendern. Der Link oben gibt Ihnen Schritt für Schritt Anweisungen, aber wenn Sie sich verirren, zögern Sie nicht, mir Fragen zu stellen.
Tags und Links ruby-on-rails email unsubscribe