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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top