Pergunta

Eu tenho um modelo de missão que possui tarefa, e a tarefa pertence a missão

Para segurança, fiz essa validação no modelo de tarefas:

  validates_presence_of :mission_id
  validates_numericality_of :mission_id

Mas o problema é que, ao criar uma missão e adicionar tarefas como esta:

 @mission.tasks.build

A validação retorna um erro, porque o ID da missão na tarefa é nulo (a missão ainda não foi criada)

Se eu excluir a validação, a missão e a tarefa são criadas bem -sucedidas, mas como posso manter a validação e ainda ter esse trabalho? Eu poderia fazer um retorno de chamada após o salvamento, mas não acho que esteja certo, porque não quero salvar tarefas sem mission_id.

PS Estou escondendo meu campo missionário no formulário. Se eu tiver visível, ele mostrará a missão do Currect e tudo está bem. Mas se eu escondi o erro acontecer.

<%=  f.hidden_field :mission, :label => "Missão" %>

O formulário está redefinindo os atributos fornecidos pelo controlador na nova ação?

Foi útil?

Solução

Use a seguir em mission.rb

has_many :tasks
validates_associated :task

Tarefa.rb

belongs_to :mission

no 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/validações/classmethods.html

Outras dicas

Ao validar um atributo aninhado, você deve fazer a seguinte validação:

 validates_associated   :mission
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top