ruby-on-rails Rails 7 - link_to与方法:delete仍然执行GET请求

bvuwiixz  于 2022-11-19  发布在  Ruby
关注(0)|答案(4)|浏览(228)

我正在尝试让这个链接工作,执行DELETE请求:

<%= link_to "Sign Out", destroy_user_session_path, method: :delete %>

但是,当我点击它时,我的浏览器仍然执行GET请求(失败的原因显而易见):

我在其他论坛上读到过很多帖子,这可能与jquery没有被包含有关。他们提到你需要取消注解app/javascript/application.js中的一行,但是我的帖子很空:

// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
import "@hotwired/turbo-rails"
import "controllers"

这些论坛帖子也很老了,所以我怀疑在此期间发生了一些变化。

hivapdat

hivapdat1#

如这里所建议的,以下内容就足够了:

<%= link_to "Sign Out", destroy_user_session_path, data: { "turbo-method": :delete } %>

我已经在我的项目中测试过了,它看起来运行得很好。也要感谢@alexts,你基本上也解决了这个问题,但是GitHub上的评论甚至消除了双重请求。

lxkprmvk

lxkprmvk2#

在rails 7中删除内容(至少)有两种方法:

使用button_to(首选IMHO):

<%= button_to 'Sign Out', destroy_user_session_path, method: :delete %>

呈现一个HTML表单,该表单发送一个带有隐藏的_method属性的POST请求,该属性的值为“delete”。Rails会将其视为具有DELETE方法(并将其路由到products#destroy或您的路由所指示的任何方法)。不要在另一个表单中使用此方法(HTML forbids一个表单在另一个表单中)。

<%= link_to 'Sign Out', destroy_user_session_path, data: {turbo_method: :delete} %>

呈现具有data-turbo-method属性的简单a标记。此链接发送真实的DELETE请求。
如果您的destroy操作以redirect_to结束,一些浏览器会使用DELETE方法重定向到一个新的位置(导致错误),所以请确保像指南建议的那样,在redirect_to中添加status: :see_other参数。

确认

如果要将确认提示添加到上面的按钮:

<%= button_to 'Sign Out', destroy_user_session_path, method: :delete,
  form: {data: {turbo_confirm: 'Are you sure?'}} %>

如果要向上面的链接添加确认:

<%= link_to 'Sign Out', destroy_user_session_path,
  data: {turbo_method: :delete, turbo_confirm: 'Are you sure?'} %>
oug3syen

oug3syen3#

"在git上找到“
运行这些命令
对我很有效。

$ rails importmap:install
$ rails turbo:install stimulus:install
lzfw57am

lzfw57am4#

方法::delete只添加一个属性
为了使它有用,rails_ujs库负责尝试包含有用的内容

相关问题