Rails的嵌套属性表单会不断添加新记录,而不是更新现有关联

时间:2018-12-06 23:20:12

标签: ruby-on-rails

我有一个非常基本的应用程序,该应用程序使用嵌套表单来更新其关联的属性。这是两个模型的示例:

class Screenshot < ApplicationRecord
  belongs_to :finding
end

class Finding < ApplicationRecord
  has_many :screenshots
  accepts_nested_attributes_for :screenshots, update_only: true
end

,因此在FindingController中,我将其底部放在其参数中:

def finding_params
  params.require(:finding).permit(:name, :screenshots_attributes => {})
end

这是允许用户更改屏幕截图文本的表格。

<table>
    <thead>
        <tr>
            <th><%= check_box_tag "checked_screenshot", 0, false %></th>
            <th>Screenshot Name</th>
        </tr>
    </thead>
    <tbody>
        <%= form.fields_for :screenshots do |screenshot| %>
        <tr>
            <td>
                <%= check_box_tag "checked_screenshot[]", screenshot.object.id, false %>
            </td>
            <td>
                <%= screenshot.collection_select :name, ['New','Random2','Random2','Low','Informational'], :to_s, :to_s, {class: "form-control"}  %>
            </td>
        </tr>
        <% end %>
    </tbody>
</table>

如此简单,用户可以从下拉框中选择一个名称,该名称应用于更新与发现相关联的屏幕截图的名称。但是,不是将名称从New更改为Random2,而是仅使用名称screenshotRandom2创建了一条新记录,而不是更新完成的关联。此时,Finding现在有两个屏幕截图,而不是一个。

我以前从没有回想过这个问题,但是我不确定在这里是否做错了什么。

编辑

随着我在分辨率方面取得更大的进步,看来我的问题在某种程度上与该数据表有关。如果我避免初始化数据表,那么它将起作用并包含一个ID并按预期更新屏幕快照名称。我将datatable类添加回它的那一刻,它停止工作,并且在屏幕截图参数中不包含id参数。

例如,没有数据表,我可以在HTML源代码中看到它:

<input type="hidden" value="628" name="finding[screenshots_attributes][0][id]" id="finding_screenshot_attributes_0_id">

但是一旦应用了数据表,它就会消失。

0 个答案:

没有答案