Форма вложенных атрибутов Rails продолжает добавлять новую запись вместо обновления существующих ассоциаций - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть очень простое приложение, которое использует вложенную форму для обновления связанных атрибутов.Вот пример двух моделей:

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, он просто создает новую запись для screenshot с именем Random2, а не обновляет выполненную ассоциацию.На данный момент Finding теперь имеет два снимка экрана, а не один.

Я никогда не вспоминал, что имел эту проблему раньше, но я не уверен, что делаю здесь что-то немного не так.

РЕДАКТИРОВАТЬ

По мере того, как я продвигаюсь к решению проблемы, похоже, что моя проблема как-то связана с данными.Если я избегаю инициализации таблиц данных, то это работает и включает идентификатор и обновляет имя снимка экрана, как и ожидалось.В тот момент, когда я добавляю обратно в него класс данных, он перестает работать и не включает параметр id с параметрами скриншота.

Например, без данных, я могу видеть это в источнике HTML:

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

но в ту минуту, когда данные применяются, они исчезают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...