Rails 6.1 edit表单渲染为空 数据库已有值未加载问题求助
问题原因
你手动为所有表单输入项指定了value为params对应参数值,覆盖了form_with绑定model后默认填充的数据库存储值。
正常使用form_with(model: task)绑定实例对象时,Rails会自动读取task实例对应字段的内容填充到表单输入项中,不需要手动指定value属性。你访问编辑页时params里不存在title、description这类字段值,所以所有表单项被强制赋值为空。
修复方案
- 删除所有表单输入控件中的
:value => params[:xxx]声明,修改后各表单项代码示例如下:
<div class="form-group"> <%= form.label :title %> <%= form.text_field :title, class: "form-control", prepopulated: "true" %> </div> <div class="form-group"> <%= form.label :description %> <%= form.rich_text_area :description, data: { controller: "mentions", mentions_target: "field" }, class: "form-control" %> </div> <div class="form-group"> <%= form.label :credits %> <%= form.number_field :credits, class: "form-control" %> </div> <div class="form-group"> <%= form.label :category %> <%= form.select :category, [ 'Development', 'Design' ], class: "form-control" %> </div>
- 额外修正关联复选框的强制选中逻辑:你当前在
collection_check_boxes里强制写了checked: true,会导致编辑时无论原有关联的用户是什么,都会默认选中ID为1的用户,如果需要保留原有绑定的关联关系,删除checked: true即可:
<%= u.label(class: "check_box") { u.check_box(class: "add_margin") + u.text } %>
补充说明
不需要担心表单提交失败的回显问题:如果更新校验失败渲染编辑页时,form.object对应的@task实例已经携带了提交的参数值,Rails会自动完成回显,不需要手动绑定params的值。
内容的提问来源于stack exchange,提问作者malditojavi
相关产品推荐
相关产品推荐

