Rails嵌套表单场景下如何访问关联记录的属性?
问题原因
你代码中使用的@day是未定义的实例变量,控制器的new方法中没有对其赋值,自然返回nil。
解决方案
Rails的表单构造器fields_for在遍历关联集合时,每个迭代项对应的实例对象可以通过表单构造器的object属性直接获取,同时如果需要提交嵌套参数,需要额外添加隐藏字段携带name的值,否则后端无法正常保存关联的day记录。
修改后的表单代码如下:
<%= form_with model: @availability, local: true, url: { action: "create" } do |form| %> <%= form.fields_for :days do |day_form| %> <h2><%= day_form.object.name %></h2> <%# 隐藏字段用于提交name参数,不需要可以删除 %> <%= day_form.hidden_field :name %> <% end %> <%= form.button :submit %> <% end %>
代码说明
- 移除了
fields_for的第二个参数@day,Rails会自动遍历@availability关联的所有day实例,逐个生成对应的表单块 day_form.object可以直接拿到当前表单块对应的day实例,调用name属性即可获取值- 新增的
hidden_field会将name作为隐藏参数提交,如果你不需要后端保存day的name属性可以删除该行。
内容的提问来源于stack exchange,提问作者user3574603
相关产品推荐
相关产品推荐

