Rails技术问题:表单提交时Membership模型新增字段无法写入数据库
解决Membership模型Role和Status字段无法存入数据库的问题
从你的服务器日志能一眼看出问题根源:role和status是作为独立参数传递的,并没有嵌套在membership哈希里。这是因为你在表单里用了通用的select_tag标签,它不会自动关联到form对象的命名空间下,换成form对象提供的select方法就能解决这个问题。
第一步:修改表单中的下拉框代码
把两个select_tag替换成form.select,这样生成的表单元素会自动带上membership[role]和membership[status]的name属性,参数就会被正确包裹在membership哈希里:
<div class="field"> <%= form.label :role %> <%= form.select :role, Membership.roles.map {|k, v| [k.humanize.capitalize, v]} %> </div> <div class="field"> <%= form.label :status %> <%= form.select :status, Membership.statuses.map {|k, v| [k.humanize.capitalize, v]} %> </div>
第二步:更新控制器的强参数
Rails的强参数机制会过滤未明确允许的字段,所以你需要在MembershipsController里更新membership_params方法,把role和status加入允许的参数列表:
def membership_params params.require(:membership).permit(:user_id, :team_id, :role, :status) end
完成这两步后再提交表单,你就能在服务器日志里看到role和status已经包含在membership参数中,这两个字段的值也会被正确写入数据库了。
内容的提问来源于stack exchange,提问作者Conor
相关产品推荐
相关产品推荐

