【发布时间】:2014-08-07 18:41:52
【问题描述】:
查看更新以了解此问题的演变
在我的网站上,每个用户都有一个仪表板,她/他可以在其中单击链接以接受或拒绝请求。根据所单击的内容,请求记录随后会以相关状态进行修补。为了让用户更容易,我尝试将此仪表板嵌入到发给他们的电子邮件中,这样他们就不必直接访问网站;想一个看起来像这样的电子邮件:
你好,
您有以下请求,请点击请求旁边的接受/拒绝
- 请求 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("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>
在我的邮件设置中,我将主机正确设置为我的域名,所以当我收到电子邮件并单击按钮时,我会适当地转到/inventories/2037/decline,但我仍然收到错误,因为显然日志说我还在尝试 GET ......这是为什么呢??
2014-08-17T06:18:03.206205+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/inventories/2037/decline"):
【问题讨论】:
-
你能发布日志吗?顺便说一句,您可以使用 lender_accept_url(borrow) 而不是硬编码您的链接
-
日志显示
Started GET "/inventories/2008/accept",然后停止。好点,我更新到lender_accept_url -
如果您无法使用补丁,那么您可以更改您的网址以使用帖子,我相信它会起作用
-
但问题是我不想创建任何新的东西,只是更新已经存在的记录的状态,顺便说一下刚刚编辑的问题以反映这种演变
-
你可以使用post来更新你的记录
标签: ruby-on-rails email ruby-on-rails-4 parameter-passing link-to