我的嵌套茧形只接受我的动态 table 的最后一行

My nested cocoon form only accepts the last line of my dynamic table

我目前正在使用 Cocoon 创建嵌套表单。我有一个 table 可以收集家庭中每个人的信息。当用户点击添加新成员时,表单会动态创建一个新行。我遇到的问题是提交表单时,只有 table 的最后一行被传递。

我尝试了很多不同的方法,包括更改成员的属性,还尝试仅隔离家庭成员,这样我就可以看到发生了什么。我试过给他们唯一的 ID,但这没有用。这可能与 rails 服务器有关,或者只是一些我看不到的错误代码。

这是我嵌套表单的地方

 <tbody class="members">
    <%= f.fields_for :household_members do |ff|%>
      <%= render 'household_member_fields', :f => ff %>
      <%end%>
    </tbody>
  </table>
  <%= link_to_add_association 'Add household member', f, :household_members, data: {association_insertion_node: '.members',
      association_insertion_method: :append} %>

这是households_member_fields的开头:

<tr class= "nested-fields">
  <% f.hidden_field :id%>
  <td><% f.label(:name)%>
    <%= text_field(:household_members, :name) %></td>
  <td><% f.label(:birthdate)%>
    <%= date_field(:household_members, :birthdate) %></td>
  <td><% f.label(:ssn)%>

这是我的控制器

  def create
    addresses = params[:addresses].permit([:county]).to_h
    contact_info = params[:contact_info].permit(params[:contact_info].keys).to_h
    household = params[:household_type].permit([:house_type]).to_h
    household_members = member_params
    @workflow = CreatesUser.new(address_info: addresses,
      contact: contact_info, household: household)
    @workflow.create
    redirect_to users_path
  end

  private

  def member_params
    params.require(:user).permit(household_members_attributes: [:id, :name, :birthdate, :ssn, :gender, :hispanic, :race, :or_tribe, :education, :_destroy])
  end

当我目前提交两个或更多家庭成员时,我只会得到其中一个这样的:

"household_members"=>{"name"=>"Fake2", "birthdate"=>"2019-07-21", "ssn"=>"fake2", "gender"=>"Female", "hispanic"=>"0", "race"=>"Alaska Native", "or_tribe"=>"0", "education"=>"Some college"}, "disablility_assistances"=>{"disabled"=>"0", "homebound"=>"0", "snap"=>"0", "ohp"=>"0", "med_insurance"=>"fake2"}, "veteran_statuses"=>{"veteran"=>"0"}

我期待得到其中的多个。如果您对我做错的事情有任何煽动,我将不胜感激!

谢谢,

Aala95

在进一步查看我的代码返回的内容后,似乎正在提交嵌套表单,但只有一个 ID 和删除: "user"=>{"household_members_attributes"=>{"0"=>{"_destroy"=>"false"}, "1"=>{"_destroy"=>"false"}}}

您必须部分修复您的嵌套项目:删除作用域名称——现在它将是双重作用域,这解释了为什么某些属性在 household_members 中(您的作用域并被强参数定义阻止)还有一些在 household_members_attributes 中(预期范围)。也不需要添加隐藏字段 :id (这将由数组中的索引自动处理)。

所以把你的部分写成如下:

<tr class= "nested-fields">
  <td><% f.label(:name)%>
    <%= text_field(:name) %></td>
  <td><% f.label(:birthdate)%>
    <%= date_field(:birthdate) %></td>
  <td><% f.label(:ssn)%>