Para validar una pertenece a la asociación en una situación de acumulación
-
22-09-2019 - |
Pregunta
Tengo un modelo de misión que has_many de tareas, y el Grupo de belongs_to Misión
Para mayor seguridad que he hecho esta validación en el modelo de tarea:
validates_presence_of :mission_id
validates_numericality_of :mission_id
Pero el problema es que cuando crear una Misión y añadir tareas como esto:
@mission.tasks.build
El error de validación vuelve, porque el ID de la misión en la tarea es nula (la misión todavía no se había creado)
Si elimino la validación, la Misión y la tarea se crea exitosamente, pero ¿cómo puedo guardar la validación y todavía tiene este trabajo? Que podía hacer una devolución de llamada después de la operación de guardar, pero no creo que es justo, porque no quiero salvar tareas sin mission_id.
P.S. Estoy ocultando mi campo de misión en el formulario. Si tengo visible, se mostrará la misión currect y todo está bien. Pero si HIDDE ocurre el error.
<%= f.hidden_field :mission, :label => "Missão" %>
Es la forma reseting los atributos dados por el controlador de la nueva acción?
Solución
El uso siguiente en Mission.rb
has_many :tasks
validates_associated :task
Task.rb
belongs_to :mission
en el controlador
@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 / validaciones / ClassMethods.html
Otros consejos
Al validar un atributo anidado, debe hacer lo siguiente validación:
validates_associated :mission