rails link_to_add_fields 以嵌套形式将每个字段添加两次
rails link_to_add_fields adds each field twice in nested form
我正在创建一个包含三个模型的嵌套表单。 授权模型,然后是两个嵌套模型:规范和子规范。 规范和子规范都具有"资格"和"不合格"字段。 我相信我已经正确设置了模型和关联,但是当我尝试使用 jQuery 动态添加新字段时,我的问题出现了。 我添加到资格的任何字段也会为不合格添加一个空白字段。 它没有显示在表单上,但是当我查看显示页面时,我看到了它。
资格
- 一个
不合格
- 乙
结果将是(x 为空):
资格
- 一个
- x
不合格
- x
- 乙
当返回编辑页面时,现在每个x都有一个空白字段。 我假设这是我的应用程序助手中的一个错误,每次在表单的一个部分中使用 link_to_add_fields 时,它都会触发在另一个部分中创建字段。 有趣的是,如果我返回编辑并填写空白字段,他们将保留新条目。 它只是迫使我为每个部分提供相同数量的项目符号,这是我不想要的。
module ApplicationHelper
def link_to_add_fields(name, f, association)
new_object = f.object.send(association).klass.new
id = new_object.object_id
fields = f.fields_for(association, new_object, child_index: id) do |builder|
render(name.to_s.singularize + "_fields", f: builder)
end
link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("'n", "")})
end
和我的表格
<%= form_for(@grant) do |f| %>
<div class="field">
<%= f.label :overview %><br>
<%= f.text_area :overview %>
</div>
<h2> Eligibility </h2>
<%= f.fields_for :specs do |builder| %>
<%= render 'eligibility_fields', f: builder %>
<% end %>
<%= link_to_add_fields "eligibility", f, :specs %>
<h2> Ineligibility </h2>
<%= f.fields_for :specs do |builder| %>
<%= render 'ineligibility_fields', f: builder %>
<% end %>
<%= link_to_add_fields "ineligibility", f, :specs %>
和eligibility_fields渲染
<fieldset>
<%= f.label :eligibility, "Eligibility" %><br />
<%= f.text_area :eligibility %><br />
<%= f.label :_destroy, "Remove Eligibility" %>
<%= f.hidden_field :_destroy %>
<%= link_to "remove", '#', class: "remove_fields" %>
<%= f.fields_for :subspecs do |builder| %>
<%= render 'subeligibility_fields', f: builder %>
<% end %>
<%= link_to_add_fields "subeligibility", f, :subspecs %>
</fieldset>
最后是jQuery
jQuery ->
$('form').on 'click', '.remove_fields', (event) ->
$(this).prev('input[type=hidden]').val('1')
$(this).closest('fieldset').hide()
event.preventDefault()
$('form').on 'click', '.add_fields', (event) ->
time = new Date().getTime()
regexp = new RegExp($(this).data('id'), 'g')
$(this).before($(this).data('fields').replace(regexp, time))
event.preventDefault()
我是 rails 的新手,尤其是 jQuery,所以任何帮助将不胜感激!
禁用包装器选项对我有用:
= event.fields_for :photos, wrapper: false do |event|
相关文章:
- JS动态添加字段-删除按钮不起作用
- 向laravel表单动态添加字段
- MaskMoney.js无法处理动态添加字段
- 流星:在创建帐户上添加字段
- 使用DB值动态添加字段到Form,php
- 使用object.freeze()扩展函数对象-can't添加字段
- 在ASP.Net web窗体/MVC中动态加载和添加字段
- 如何在使用Knex.JS添加字段时捕捉错误
- KendoUI 网格:动态向数据源添加字段
- Jquery- 动态添加字段 - 防止删除最后一个项目
- JQuery 无法获取动态添加字段的值
- 扩展 Ext.data.Model(动态添加字段)
- 如何使用角度 JS 添加嵌套的添加字段
- 如何在 CKeditor 上传中向 POST 值添加字段
- 在流星中向用户集合添加字段的正确方式
- 按数组分组并在主数组中添加字段和子数组
- 如何在JavaScript中为HTML上的动态添加字段执行乘法
- 如何在javascript中为html上的动态添加字段匹配id
- 在具有嵌套属性的轨道中动态添加字段
- 使用jquery添加字段