J'utilise accepts_nested_attributes_for dans un de mes modèles Rails, et je veux sauvegarder les enfants après avoir créé le parent.
Le formulaire fonctionne parfaitement, mais la validation échoue. Pour simplifier, imaginez ce qui suit :
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
Et je cours :
Project.create!(
:name => 'Something',
:task_attributes => [ { :name => '123' }, { :name => '456' } ]
)
Lors de l'enregistrement du modèle de projet, la validation échoue sur les tâches car elles n'ont pas de project_id (puisque le projet n'a pas été enregistré).
Il semble que Rails suive le modèle ci-dessous :
- Valider le projet
- Valider les tâches
- Sauver le projet
- Sauvegarder les tâches
Le modèle devrait être :
- Valider le projet
- Sur Pass : Sauvegarder le projet et continuer...
- Valider les tâches
- On Pass : Sauvegarder les tâches
- En cas d'échec : Supprimer le projet (retour en arrière peut-être ?)
Donc ma question se résume à : Comment puis-je faire en sorte que Rails exécute la méthode project_id= (ou project=) et la validation sur les enfants (tâches) APRÈS que le parent (projet) ait été sauvegardé, mais ne sauvegarde PAS le modèle parent (projet) si un enfant (tâche) est invalide ?
Des idées ?