Button_to in E-Mail nicht veröffentlichen
SIEHE UPDATE für die Entwicklung dieser Frage
Auf meiner Website hat jeder Benutzer ein Dashboard, in dem er auf einen Link klicken kann, um eine Anfrage zu akzeptieren oder abzulehnen. Je nachdem, was angeklickt wird, wird der Anforderungsdatensatz dann mit dem entsprechenden Status PATCHED. Um es den Benutzern zu erleichtern, versuche ich, dieses Dashboard in eine E-Mail einzubetten, damit sie nie direkt zur Website gehen müssen. Denken Sie an eine E-Mail, die so aussieht:
Hallo,
Wenn Sie die folgenden Anforderungen haben, klicken Sie neben der entsprechenden Anforderung auf AKZEPTIEREN / ABLEHNEN
Anfrage A: AKZEPTIEREN, ABLEHNENAnfrage B: AKZEPTIEREN, ABLEHNEN....
Die einzige Möglichkeit, dies zu erreichen, bestand bisher darin, einen parallelen Satz von GET-Routen für die in E-Mails verwendeten Links zu haben, im Gegensatz zu den PATCH-Routen für die im eigentlichen Website-Dashboard verwendeten Links.
Sie fragen sich, ob es einen besseren Weg gibt, dies zu tun?
Routen
patch 'inventories/:id/accept', to: 'inventories#accept', as: 'lender_accept'
patch 'inventories/:id/decline', to: 'inventories#decline', as: 'lender_decline'
get 'inventories/:id/accept_email', to: 'inventories#accept', as: 'lender_accept_email'
get 'inventories/:id/decline_email', to: 'inventories#decline', as: 'lender_decline_email'
Link in E-Mail
<%= "#{link_to 'ACCEPT', lender_accept_email_url(borrow), method: :patch} or #{link_to 'DECLINE', lender_decline_email_url(borrow)}" %>
Link auf Website-Dashboard
<%= "#{link_to 'ACCEPT', lender_accept_path(borrow), method: :patch} or #{link_to 'DECLINE', lender_decline_path(borrow), method: :patch}" %>
AKTUALISIEREN
Ok habe das ausprobiertbutton_to
um ein Formular für den POST zu generieren, um zu vermeiden, dass GET für den POST verwendet wird, da dies die "lückenhafte" Lösung war, die immer noch nicht funktioniert ...
Routen:
post 'inventories/:id/accept', to: 'inventories#accept', as: 'lender_accept'
post 'inventories/:id/decline', to: 'inventories#decline', as: 'lender_decline'
Mailer-Ansicht:
<%="#{button_to 'YES', lender_accept_url(borrow), method: :post, id: "accept #{borrow.id}", style: "background-color:green; color: white; width: 40px; display: inline"} %>
<%="#{button_to 'NO', lender_decline_url(borrow), method: :post, id: "decline #{borrow.id}", style: "background-color:gray; width: 40px; display: inline"}" %>
Ich habe auch ein Inspect-Element in der E-Mail durchgeführt, um zu bestätigen, dass dasbutton_to
hat den entsprechenden Code generiert:
<form action="inventories/2037/decline" method="post" target="_blank" onsubmit="return window.confirm("You are submitting information to an external page.\nAre you sure?");"><div><input style="background-color:gray;width:40px;display:inline" type="submit" value="NO"></div></form>
<div>
<input style="background-color:gray;width:40px;display:inline" type="submit" value="NO">
</div>
</form>
In meinen Mailer-Einstellungen habe ich den Host richtig auf meinen Domain-Namen eingestellt. Wenn ich die E-Mail erhalte und auf die Schaltfläche klicke, werde ich zu weitergeleitet/inventories/2037/decline
angemessen, aber ich bekomme immer noch den Fehler, weil anscheinend in den Protokollen steht, dass ich immer noch versuche, GET zu wählen ... warum ist das so?
2014-08-17T06:18:03.206205+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/inventories/2037/decline"):