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(&quot;You are submitting information to an external page.\nAre you sure?&quot;);"><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"):

Antworten auf die Frage(2)

Ihre Antwort auf die Frage