嵌套形式的动态生成字段添加了两次 Rails

Dynamically generated field in nested form added twice Rails

我有两个模型,第一个是 grants,第二个是 specs。 Specs 有两个字段 ineligibility 和 eligibility,嵌套在 grants 中。我的大部分设置都很好,但我需要帮助修改 JQuery,因为每次我单击 "add an ineligibility" 时,也会添加一个资格。它没有显示在表单上,​​但它确实在我的显示视图中显示为空白项目符号。当我返回编辑表格时,我现在看到资格的空白字段。如果我在资格中输入新文本,两个字段都会保存正确的文本。我希望能够添加一个字段而不自动添加另一个字段。我的 jQuery 和辅助代码来自 Railscasts PRO #196 Nested Model Form。我是 rails 的新手,尤其是 jQuery,所以非常感谢任何帮助!

jQuery ->
$('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()

和辅助方法:

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

我想与可能尝试做同样事情的任何人分享我的解决方案。我犯的错误是认为我可以在每个模型中有多个字段,但只将其中一个字段保存到数据库中。但是每次我添加一个字段时,它都会将整个记录与所有其他字段一起保存,即使它们是空白的。这就是为什么每次我添加资格时我也会得到一个空白的不合格字段。解决方案是分解模型并为每个需要的字段创建一个新模型。

由于我的真正目标只是获得符合条件和不符合条件的项目符号列表,因此我提出了另外两个仅处理格式设置的解决方案。第一种是使用富文本编辑器,另一种是使用 .gsub 在事后添加格式。例如:

<p>
  <strong>Eligibility:</strong>
  <%= (@grant.eligibility).gsub(/[=+~]/, '=' => '<ul>','~' => '</ul>', '+' => '<li/>').html_safe %> 
</p>