我有两个模型类,比如父母和孩子。首先创建父母,然后可以添加孩子。
我正在尝试创建一个编辑页面,您可以在其中编辑父级的信息并可能添加一个子级。
我设置了它,以便父母可以访问子属性:
has_one :child
accepts_nested_attributes_for :child
在我编辑父信息的视图中,我有一个显示所有父信息的表单,然后是编辑现有子信息或添加新子信息的字段:
<%= form_for(@parent, :as => :parent, ... %>
<%= form.text_field(:field_one) %>
<%= form.text_field(:field_two) %>
<%= form.fields_for @child do |child| %>
<%= child.text_field(:child_field_one) %>
<%= child.text_field(:child_field_two) %>
<%end%>
<%end%>
问题是我可以让它工作的唯一方法是让我的父编辑控制器创建一个新的子节点并将其与父节点关联,然后再渲染视图。然后当用户尝试保存时,我的控制器会检查子字段是否为空,如果是则删除新创建的子字段。这样做的一个问题是,每次加载编辑页面时它都会创建一个空子项(假设一个子项不存在),然后将其保存到数据库中(我不想要)
是否有一种优雅的方式可以在父编辑页面上显示不存在的子项的字段,而无需在渲染之前创建新的子项?理想情况下,我希望所有内容都在一个表单上。我很确定我可以想出一种方法,用多个保存按钮以多种形式执行此操作。