Valider un appartient à l'association dans une situation de construction
-
22-09-2019 - |
Question
J'ai un modèle de mission qui has_many tâche, et le Groupe belongs_to Mission
Pour plus de sécurité, je l'ai fait cette validation sur le modèle de travail:
validates_presence_of :mission_id
validates_numericality_of :mission_id
Mais le problème est que lorsque créer une mission et ajouter des tâches comme ceci:
@mission.tasks.build
La validation renvoie une erreur, car l'ID de mission sur la tâche est nulle (la mission n'a pas encore été créée)
Si je supprime la validation, la mission et la tâche est créé avec succès, mais comment puis-je conserver la validation et encore ce travail? Je pourrais faire un rappel après la sauvegarde, mais je ne pense pas que ce soit juste, parce que je ne veux pas enregistrer les tâches sans mission_id.
P.S. Je suis hidding mon champ de mission sur le formulaire. Si je l'ai visible, il montrera la mission currect et tout est ok. Mais si je HIDDE il l'erreur se produit.
<%= f.hidden_field :mission, :label => "Missão" %>
La forme reseting les attributs donnés par le contrôleur sur la nouvelle action?
La solution
Utilisation suivante dans Mission.rb
has_many :tasks
validates_associated :task
Task.rb
belongs_to :mission
dans le contrôleur
@mission=Mission.new(params[:mission])
task= @mission.tasks.build(params[:task]) ###this is same as Task.new(:mission_id=>@mission.id)
if @mission.save #this will save only when mission as well as task are valids, also it will automatically assign mission_id to tasks table you have nothing to worry about it<br>
else
#your error code will be here.......
end
Ref: - http://api.rubyonrails.org/classes/ ActiveRecord / Validations / ClassMethods.html
Autres conseils
Lors de la validation d'un attribut imbriqué, vous devez faire la validation suivante:
validates_associated :mission