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资源:
(如果用Webpacker则是<%= javascript_importmap_tags %><%= 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
相关产品推荐
相关产品推荐

