Вложенные модели и родительская проверка

У меня есть две модели.
- Родитель has_many Дети ;
- Родитель accept_nested_attributes_for Дети ;

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

Я использую валидацию для проверки наличия детей для каждого родителя, поэтому я не могу спасти родителя без детей.

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

валидация работает. Затем мы уничтожим дочерние элементы с помощью атрибута _destroy :

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

, чтобы я мог уничтожить всех дочерних элементов с помощью вложенных форм, и проверка пройдет.

На самом деле это происходит потому, что после того, как я удалю дочернего элемента из моего родителя с помощью _delete , дочерний метод по-прежнему возвращает уничтоженный объект, прежде чем я его перезагружаю, поэтому проверка прошла:

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

Это ошибка?

В чем вопрос. Вопрос - лучшее решение для его ремонта. Мой подход состоит в том, чтобы добавить фильтр before_destroy к Дочернему , чтобы проверить, последний ли он. Но это усложняет систему.

40
задан fl00r 28 February 2011 в 16:33
поделиться