Я использую accepts_nested_attributes_for в одной из моих моделей Rails, и я хочу сохранить детей после создания родителя.accepts_nested_attributes_for не удалось выполнить проверку дочерней ассоциации
Форма работает отлично, но проверка не выполняется. Для простоты представим себе следующее:
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 будет по следующей схеме:
- Validate проекта
- Validate Задачи
- Сохранить проект
- Сохранить Задачи
Схема должна быть:
- Validate Проект
- На перевале: Сохранить проект и продолжить ...
- Validate Задачи
- На перевале: Сохранить задачи
- при неудаче: Удалить проект (откат может быть?)
Так что мой вопрос сводится к следующему: Как я могу получить Rails для запуска метода project_id = (или project =) и проверки для детей (задач) ПОСЛЕ родительского (проект), но НЕ сохранить родительскую (проектную) модель, если какой-либо ребенок (задача) недействителен?
Любые идеи?
Это не работает для меня. В validates_presence_of: project_id вызов «project» возвращает nil, заставляя его попробовать и проверить файл project_id и не выполнить проверки. Я задал еще один вопрос, потому что я думал, что проблема другая, но похоже, что она похожа на http://stackoverflow.com/questions/2102724/rails-nested-attributes-association-validation-failing. –
Ниже приведено обратное решение для Rails 3.0 и выше. – nertzy