почему Rails включает идентификаторы вложенных атрибутов в формы для обновления?

#ruby-on-rails #updates

#ruby-на-рельсах #Обновления

Вопрос:

Итак, представьте, что у вас есть форма для parent , которая принимает вложенные атрибуты для child , поэтому, когда вы обновляете parent , rails также child_attributes отправляет child's идентификатор, для чего? Если я установлю parent's идентификатор в действии обновления, найти child по foreign_key не проблема, не так ли? Чего мне не хватает?

Ответ №1:

Вы также можете обновить children (это то, что accepts_nested_attributes_for делает).
Rails нужно знать, какой из дочерних элементов вы изменяете, поэтому ему нужны id дочерние элементы.
В противном случае пришлось бы каждый раз уничтожать и перестраивать дочерние элементы.

Комментарии:

1. О, это имеет смысл, спасибо. Но как насчет ассоциаций «имеет один»?

2. Rails обрабатывает их одинаково. Для обновления дочернего элемента Rails использует id дочернюю запись и fields_for генерирует скрытое id поле для каждого постоянного объекта. Rails также различает атрибуты для объектов new или persistent путем проверки существования id . Наличие id для существующих объектов просто упрощает работу.