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

时间:2016-02-02 22:02:49

标签: javascript jquery ruby-on-rails-4 nested-forms nested-attributes

我有两个型号,第一个是授予第二个是规格。 Specs有两个字段不合格和资格,并嵌入到授权中。我几乎所有设置都很好,但我需要帮助修改JQuery,因为每次点击"添加不合格"时,还会添加资格。它没有显示在表单上,​​但它确实在我的节目视图中显示为空白子弹。当我回去编辑表单时,我现在看到空白字段的资格。如果我将新文本输入资格,则两个字段都会保存正确的文本。我希望能够添加一个字段而不自动添加另一个字段。我的jQuery和帮助程序代码来自Railscasts PRO#196嵌套模型表单。我是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

1 个答案:

答案 0 :(得分:0)

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

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

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