Я использую accepts_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' } ]
)
При сохранении модели проекта проверка не выполняется в задачах, потому что у них нет project_id (так как проект не был сохранен).
Кажется, что Rails выполняет следующий шаблон:
- Проверить проект
- Подтвердить задачи
- Сохранить проект
- Сохранить задачи
Образец должен быть:
- Проверить проект
- On Pass: Сохранить проект и продолжить...
- Подтвердить задачи
- On Pass: Save Tasks
- В случае сбоя: удалить проект (возможно, откат)
Итак, мой вопрос сводится к следующему: Как я могу получить Rails для запуска метода project_id = (или project =) и проверки для дочерних элементов (задач) ПОСЛЕ того, как родительский (проект) был сохранен, но НЕ сохраняет родителя ( проект), если какой-либо ребенок (задача) недействителен?
Любые идеи?