Мое личное мнение таково, что выполнение этого с использованием флага :destroy => 1
намного менее беспорядочно, чем альтернатива.Альтернативой может быть загрузка ассоциации на сервер, сравнение входящих параметров, выяснение, какие записи отсутствуют, затем удаление отсутствующих и обновление оставшихся.Это много лишней логики, операций с БД и, что хуже всего, вам придется вручную переделать accepts_nested_attributes_for
, что является нетривиальным подвигом.
HTML даст вам небольшую хитростьвыполнить это без JS.Добавьте флажок к каждой записи с именем :destroy
.Используйте высокоуровневые помощники форм, например, check_box
, а не check_box_tag
(что требует много вещей, чтобы получить право вручную), или помощник по формам более высокого уровня, такой как simple_form gem .
Если флаг не установлен, HTML ничего не отправит, и запись останется.Если флажок установлен, HTML отправит флаг :destroy
, и он будет удален с помощью встроенных серверных механизмов из коробки.
Вы не сказали много о своем переднемкод конца;Похоже, у вас там куча JS.Вы, вероятно, скрываете запись, когда пользователь «удаляет» ее, вы можете просто программно добавить флаг destroy
в этом случае, если вы не хотите использовать метод флажка выше.Это будет намного проще и менее подвержено ошибкам, чем попытка угадать поведение бэкэнда.