Modelos aninhados e validação pai

Eu tenho dois modelos.
- Parent tem muitos Children;
- Parent accept_nested_attributes_for Children;

class Parent < ActiveRecord::Base
  has_many :children, :dependent => :destroy
  accepts_nested_attributes_for :children, :allow_destroy => true
  validates :children, :presence => true
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

Eu uso a validação para validar a presença de filhos para todos os pais, portanto, não posso salvar os pais sem filhos.

parent = Parent.new :name => "Jose"
parent.save
#=> false
parent.children_attributes = [{:name => "Pedro"}, {:name => "Emmy"}]
parent.save
#=> true

validação funciona. Então vamos destruir as crianças via_destroy atributo:

parent.children_attributes = {"0" => {:id => 0, :_destroy => true}}
parent.save
#=> true !!!
parent.reload.children
#=> []

para que eu possa destruir todos os filhos através de formulários aninhados e a validação será aprovada.

Na verdade, isso acontece porque depois de excluir o filho do meu pai via_delete, o método children ainda retorna o objeto destruído antes de recarregá-lo, então a validação passou:

parent.children_attributes = {"0" => {:id => 0, :_destroy => true}}
parent.save
#=> true !!!
parent.children
#=> #<Child id:1 ...> # It's actually deleted
parent.reload.children
#=> []

Isso é bug?

Qual é a pergunta. A questão é a melhor solução para repará-lo. Minha abordagem é adicionar o filtro before_destroy aoChild para verificar se é o último. Mas isso torna o sistema complicado.

questionAnswers(2)

yourAnswerToTheQuestion