На самом деле проблема, потому что это проверяет наличие детей ДО удаления детей. Поэтому мы должны проверить, если дети
я есть две модели.
- Parent
имеет много Children
;
- Parent
accepts_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
Я использую валидацию для проверки наличия детей для каждого родителя, поэтому я не могу сохранить родителя без детей.
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
, метод children все еще возвращает уничтоженный объект, прежде чем я его перезагрузил, поэтому проверка прошла:
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 кChild
чтобы проверить, если это последний. Но это усложняет систему.