Button_to в электронном письме не публикуется

СМОТРЕТЬ ОБНОВЛЕНИЕ для эволюции этого вопроса

На моем веб-сайте у каждого пользователя есть панель инструментов, на которой он / она может щелкнуть ссылку, чтобы принять или отклонить запрос. В зависимости от того, что щелкнуло, запись запроса затем патчируется с соответствующим статусом. Чтобы было проще для пользователей, я пытаюсь встроить эту панель в электронное письмо, чтобы им никогда не приходилось заходить на сайт напрямую; придумайте письмо, которое выглядит так:

Всем привет,

У вас есть следующие запросы, нажмите ACCEPT / DECLINE рядом с запросом, чтобы сделать это

Запрос A: ПРИНЯТЬ, ОТКЛОНИТЬЗапрос B: ПРИНЯТЬ, ОТКЛОНИТЬ

....

До настоящего времени единственным способом добиться этой работы было использование параллельного набора маршрутов GET для ссылок, используемых в электронной почте, по сравнению с маршрутами PATCH для ссылок, используемых в фактической панели мониторинга веб-сайта.

Хотите знать, есть ли лучший способ сделать это?

Маршруты

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_to 'ACCEPT', lender_accept_email_url(borrow), method: :patch} or #{link_to 'DECLINE', lender_decline_email_url(borrow)}" %>

Ссылка на панель инструментов сайта

<%= "#{link_to 'ACCEPT', lender_accept_path(borrow), method: :patch} or #{link_to 'DECLINE', lender_decline_path(borrow), method: :patch}" %>

ОБНОВИТЬ

Хорошо попробовалbutton_to сгенерировать форму для POST, чтобы избежать использования GET для выполнения POST, как это было «пятнистое» решение выше, все еще не работает ...

Маршруты:

post 'inventories/:id/accept', to: 'inventories#accept', as: 'lender_accept'
post 'inventories/:id/decline', to: 'inventories#decline', as: 'lender_decline'

Почтовый просмотр:

<%="#{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"}" %>

Я сделал элемент проверки по электронной почте, а также, чтобы подтвердить, чтоbutton_to генерировал соответствующий код:

<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>

В настройках почтовой программы я правильно установил хост на свое доменное имя, поэтому, когда я получаю электронное письмо и нажимаю кнопку, меня переводят на/inventories/2037/decline соответственно, но я все еще получаю ошибку, потому что, очевидно, в журналах говорится, что я все еще пытаюсь пойти на GET ... почему это ??

2014-08-17T06:18:03.206205+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/inventories/2037/decline"):

Ответы на вопрос(2)

Ваш ответ на вопрос