Ruby on rails 删除Action Mailer视图中的模型资源链接
我在生成允许在单击时删除资源的Action Mailer链接时遇到了一些问题。以下是我的delete方法代码(在应用程序中运行良好): 以下是应用程序的路径: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
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>