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

Dynamically generated field in nested form added twice Rails

本文关键字:Rails 两次 添加 字段 嵌套 动态      更新时间:2023-09-26

我有两个模型,第一个是赠款,第二个是规格。 规范有两个字段"不合格"和"资格",并嵌套在授权中。 我基本上一切都设置得很好,但我需要帮助修改 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
我想

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

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

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