You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中删除链接触发show而非destroy动作问题求助

解决Rails Turbo删除功能触发Show动作的问题

问题诊断

你的代码核心问题是删除链接没有触发DELETE请求,而是发送了默认的GET请求,所以路由匹配到了movies#show。常见原因有视图变量错误、Turbo未正确生效两类。

修复步骤

1. 修正视图中的路径变量

你在link_to里用了movie_path(movie),但在show.html.erb模板中,控制器传递的实例变量是@movie,局部变量movie大概率是笔误未定义。把路径改为:

<%= link_to "Delete", movie_path(@movie),
      data: { turbo_method: :delete , turbo_confirm: "Are you sure?" } %>

2. 确认Turbo正确集成

Turbo负责将GET链接转换为DELETE请求,如果它没加载,链接会默认发送GET:

  • 打开app/javascript/application.js,确认有这行代码:
    import "@hotwired/turbo-rails"
    
  • 检查布局文件(比如app/views/layouts/application.html.erb),确保引入了JavaScript资源:
    <%= javascript_importmap_tags %>
    
    (如果用Webpacker则是<%= javascript_pack_tag 'application' %>)

3. 备选方案:改用button_to

如果Turbo还是不生效,button_to会自动生成表单发送DELETE请求,兼容性更强:

<%= button_to "Delete", @movie, method: :delete, data: { turbo_confirm: "Are you sure?" }, class: "button" %>

4. 验证路由

运行rails routes命令,确认存在如下路由:

DELETE /movies/:id(.:format)  movies#destroy

内容的提问来源于stack exchange,提问作者Augusto Barbosa Arraes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:40:16