Załóżmy, że każdy z nich jest Project
has_many
Tasks
.Zapisz zmiany TYLKO w skojarzeniu has_many po pomyślnym zapisaniu obiektu nadrzędnego?
Jeśli robię
some_project.tasks = list_of_tasks
some_project.save
zadania Projektu aktualizowane nawet jeśli Zapisz się niepowodzeniem. Jeśli list_of_tasks
składa się z nowych rekordów, zadania projektu zostaną usunięte usunięte, nawet jeśli zapis nie powiedzie się! WHOA!
Jeśli zapis zakończy się niepowodzeniem, projekt powinien mieć takie same zadania, jakie miał, zanim zacząłem z nim mieszać. Jak uzyskać to zachowanie i dlaczego nie jest ono domyślne?
To działa, ale to podejście oznacza, że za każdym razem, gdy aktualizuję zadania w całej mojej aplikacji, muszę pamiętać, aby zawrzeć transakcję (i jestem pewna, że zapomnę). Byłoby znacznie lepiej, gdybym mógł zamknąć to zachowanie w modelu 'Projekt' w sposób DRY. –
Zdefiniuj metodę 'replace_tasks (new_tasks)' która właśnie to – glebm