Я использую acceptpts_nested_attributes_for в одной из моих моделей Rails и хочу сохранить дочерние элементы после создания родительского.
Форма работает отлично, но проверка не пройдена. Для простоты представьте следующее:
class Project < ActiveRecord::Base
has_many :tasks
accepts_nested_attributes_for :tasks
end
class Task < ActiveRecord::Base
belongs_to :project
validates_presence_of :project_id
validates_associated :project
end
И я бегу:
Project.create!(
:name => 'Something',
:task_attributes => [ { :name => '123' }, { :name => '456' } ]
)
При сохранении модели проекта проверка не выполняется для задач, поскольку у них нет идентификатора проекта (поскольку проект не был сохранен).
Кажется, что Rails следует шаблону ниже:
- Подтвердить проект
- Проверка задач
- Сохранить проект
- Сохранить задачи
Шаблон должен быть:
- Подтвердить проект
- В пути: сохранить проект и продолжить ...
- Проверка задач
- На проходе: сохранение задач
- В случае ошибки: удалить проект (может быть откат?)
Таким образом, мой вопрос сводится к следующему: Как я могу заставить Rails запустить метод project_id = (или project =) и выполнить проверку дочерних элементов (задач) ПОСЛЕ того, как родитель (проект) был сохранен, но НЕ сохранить родитель модель), если какой-либо дочерний элемент (задача) недействителен?
Есть идеи?