Ruby on rails 删除Action Mailer视图中的模型资源链接

Ruby on rails 删除Action Mailer视图中的模型资源链接,ruby-on-rails,Ruby On Rails,我在生成允许在单击时删除资源的Action Mailer链接时遇到了一些问题。以下是我的delete方法代码(在应用程序中运行良好): 以下是应用程序的路径: Prefix Verb URI Pattern Controller#Action registrants POST /registrants(.:format) registrants#create registrant GET

我在生成允许在单击时删除资源的Action Mailer链接时遇到了一些问题。以下是我的delete方法代码(在应用程序中运行良好):

以下是应用程序的路径:

Prefix Verb   URI Pattern                     Controller#Action
         registrants POST   /registrants(.:format)          registrants#create
          registrant GET    /registrants/:id(.:format)      registrants#show
                     DELETE /registrants/:id(.:format)      registrants#destroy
static_pages_contact GET    /static_pages/contact(.:format) static_pages#contact
  static_pages_about GET    /static_pages/about(.:format)   static_pages#about
              events GET    /events(.:format)               events#index
                     POST   /events(.:format)               events#create
           new_event GET    /events/new(.:format)           events#new
          edit_event GET    /events/:id/edit(.:format)      events#edit
               event GET    /events/:id(.:format)           events#show
                     PATCH  /events/:id(.:format)           events#update
                     PUT    /events/:id(.:format)           events#update
                     DELETE /events/:id(.:format)           events#destroy
                root GET    /                               static_pages#home
这是来自邮件程序的链接,我想在其中生成删除链接:

<p>Can't make the event? Click here to cancel your registration: <%= link_to 'Destroy', @registrant, method: :delete %> </p>
无法生成事件?单击此处取消您的注册:


从Rails视图中发出PUT和DELETE语句的能力是由于Rails在格式化链接和发出浏览器普遍理解的请求方面做了额外的工作。通常,浏览器在执行表单提交和请求文档时只知道如何使用HTTP动词GET和POST。例如,Rails允许通过发出POST请求和提供HTTP头来使用其他动词,HTTP头声明服务器应将请求解释为删除请求

在mailer视图中使用指向帮助程序的
链接时,Rails用于转换和发出请求的附加javascript不存在,因此单击链接时将发送一个GET请求,而不包含任何附加信息

实际上有两种选择:

1:通过GET请求可以取消注册。(这是最简单的方法,但不是首选方法,因为它允许任何人向该终结点发出GET请求并删除注册。以前,web爬虫发出GET请求以索引页面,并无意中删除了许多记录时就出现过这种情况)


2:让邮件视图中的链接直接指向Rails中的可访问登录页。一旦用户在这里,登录页将有额外的说明,删除链接将工作,因为浏览器再次可以访问Rails javascript帮助程序。

从Rails视图中发出PUT和DELETE语句的能力是由于Rails在格式化链接和发出浏览器普遍理解的请求方面做了额外的工作。通常,浏览器在执行表单提交和请求文档时只知道如何使用HTTP动词GET和POST。例如,Rails允许通过发出POST请求和提供HTTP头来使用其他动词,HTTP头声明服务器应将请求解释为删除请求

在mailer视图中使用指向
帮助程序的
链接时,Rails用于转换和发出请求的附加javascript不存在,因此单击链接时将发送一个GET请求,而不包含任何附加信息

实际上有两种选择:

1:通过GET请求可以取消注册。(这是最简单的方法,但不是首选方法,因为它允许任何人向该终结点发出GET请求并删除注册。以前,web爬虫发出GET请求以索引页面,并无意中删除了许多记录时就出现过这种情况)


2:让邮件视图中的链接直接指向Rails中的可访问登录页。用户到达后,登录页将有附加说明,删除链接也会起作用,因为浏览器再次可以访问Rails javascript帮助程序。

检查生成的电子邮件中的html链接。尝试跟随链接并确保您的控制器操作被击中。如果你做到了这一点,你就把问题缩小到了你的控制器操作上。顺便说一下,您显示的代码没有任何访问控制,即任何人都可以删除任何人。我在发布之前检查了它,当它命中正确的控制器和操作时,出现了错误,因为浏览器总是发送GET请求,而删除操作使用delete。感谢您指出访问控制,我实际上在控制器中有一些方法,我正在添加一个令牌来验证电子邮件链接。如果它遇到了正确的控制器操作,如何通过更改HTTP方法来解决?HTTP方法所做的只是路由到控制器操作。不管怎么说,很高兴您发现它实际上比活动记录引发的错误还要好,并指出GET不存在删除路径。但正如我在下面提到的,我解决了这个问题,只需发送一个链接到浏览器中加载的编辑路径,并有一个删除资源的按钮。检查生成的电子邮件中的html链接。尝试跟随链接并确保您的控制器操作被击中。如果你做到了这一点,你就把问题缩小到了你的控制器操作上。顺便说一下,您显示的代码没有任何访问控制,即任何人都可以删除任何人。我在发布之前检查了它,当它命中正确的控制器和操作时,出现了错误,因为浏览器总是发送GET请求,而删除操作使用delete。感谢您指出访问控制,我实际上在控制器中有一些方法,我正在添加一个令牌来验证电子邮件链接。如果它遇到了正确的控制器操作,如何通过更改HTTP方法来解决?HTTP方法所做的只是路由到控制器操作。不管怎么说,很高兴您发现它实际上比活动记录引发的错误还要好,并指出GET不存在删除路径。但正如我在下面提到的,我解决了这个问题,只需发送一个指向编辑路径的链接,该路径加载到浏览器中,并有一个删除资源的按钮。谢谢。最后,我选择了第2个,在编辑操作中添加了一个链接,然后在那里创建了一个删除按钮。谢谢。最后,我选择了第二个,在编辑操作中添加了一个链接,然后在那里创建了一个删除按钮。
<p>Can't make the event? Click here to cancel your registration: <%= link_to 'Destroy', @registrant, method: :delete %> </p>