我的嵌套茧形只接受我的动态 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)%>
我目前正在使用 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)%>