Rails嵌套资源form_for表单误填充父模型属性与请求错误如何解决
问题修复方案
1. 修复请求类型错误问题
出现PATCH请求误触playlist#update的核心原因是form_for的资源数组顺序写反了,Rails嵌套资源表单需要把父级资源放在参数的前一位,子资源放在后一位,才能正确识别路由规则。
将视图中form_for声明代码替换为下方代码即可,无需手动指定url参数,Rails会自动生成指向POST /playlists/:playlist_id/videos的表单提交地址:
<%= form_for([@playlist, @video], class: "contents") do |form| %>
2. 修复表单自动填充Playlist属性问题
无需修改模型属性名,直接在表单控件上手动指定空的value值,即可覆盖Rails表单助手默认读取的对象属性值,避免加载关联Playlist的同名字段内容:
- title输入框修改为:
<%= form.text_field :title, value: "", class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
- description输入框修改为,删除无效的
text: nil参数,补充value: "":
<%= form.text_area :description, value: "", rows: 4, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
以上修改无需调整现有模型、验证、测试逻辑,即可解决两个问题。
内容的提问来源于stack exchange,提问作者CJG
相关产品推荐
相关产品推荐

