Rails 5.1中form_for编辑场景报错求助,无法沿用新增场景方案
Rails 5.1 form_for 编辑场景报错排查建议
嘿,老兄!遇到form_for的坑确实头疼,我先帮你理几个关键点,你补充下信息我再帮你精准定位:
首先需要你提供的关键信息:
- 把完整的报错信息和栈追踪贴出来吧,是路由匹配失败?还是参数不允许?不同错误指向的问题完全不一样
- 你的编辑页面里
form_for的代码是怎么写的?贴一下具体的表单代码 - 控制器里
edit和update方法的代码也发我看看,还有你之前new场景是怎么解决相同错误的? - 路由文件里关于
images的配置是啥样的?是用resources :images生成的RESTful路由吗?
先给你几个常见的排查方向,你可以先自查:
别乱指定
url: {action: "edit"}
编辑场景下,只要你在edit方法里正确赋值了@image = Image.find(params[:id]),form_for会自动识别这个对象是已存在的(有id),自动生成指向update动作的表单(PATCH/PUT请求)。你指定action: "edit"反而会让表单发GET请求到edit路由,这肯定会出问题——因为edit路由是用来显示表单的,不是处理提交的。检查
edit方法里的@image是否正确初始化
如果你的edit方法里不小心写了@image = Image.new,那form_for会把它当成新建场景,自动指向create动作,这时候就会和当前的edit路由不匹配,报路由错误。确认RESTful路由是否正常生成
打开终端跑一下rails routes | grep image,看看有没有类似这样的输出:edit_image GET /images/:id/edit(.:format) images#edit image PATCH /images/:id(.:format) images#update PUT /images/:id(.:format) images#update如果没有update相关的路由,那肯定是路由配置有问题,比如你没写
resources :images或者只写了部分路由。
等你补充完信息,咱们再进一步排查!
内容的提问来源于stack exchange,提问作者Mexa Fireg
相关产品推荐
相关产品推荐

