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

Rails更新报错:Couldn't find Movie with 'id'=:id 问题求助

问题根因

你提交表单时请求地址里的ID是硬编码的占位符:id,没有替换为实际的电影ID,导致控制器无法查询到对应记录。

具体修复步骤

1. 修复edit视图的表单配置

你写的url: '/admin/movies/:id'里的:id只是路由定义时的占位符,Rails不会自动替换为@movie的实际ID,修改为以下任意一种写法即可:

写法1(推荐,用路由辅助方法)

先给路由添加别名,修改routes.rb里的更新路由:

put '/admin/movies/:id', to: 'movies#update', as: :admin_movie

再修改表单代码:

<%= form_with model: @movie, url: admin_movie_path(@movie), method: :put do |form| %>

写法2(直接拼接ID)

<%= form_with model: @movie, url: "/admin/movies/#{@movie.id}", method: :put do |form| %>

2. 修复控制器的其他错误

  • edit方法里不需要执行@movie.save,这行代码完全多余,直接删除即可
  • update方法里的跳转路径拼写错误,你写的redirect_to :idnex要改为redirect_to :index
  • 强参数post_params里不需要permit(:id),更新用的ID是从路由参数params[:id]获取,不会从表单提交的movie参数里取,可直接删除该配置

3. 路由优化建议(可选)

你现在手写全量路由效率很低,直接用Rails内置的资源路由配置就能自动生成所有增删改查路由,替换你现有的路由代码即可:

Rails.application.routes.draw do
  namespace :admin do
    resources :movies
  end
end

配置后表单可以进一步简化,不需要手动写url和method参数:

<%= form_with model: [:admin, @movie] do |form| %>

内容的提问来源于stack exchange,提问作者Beginner Professional

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:42:01