当前位置:  开发笔记 > 编程语言 > 正文

acts_as_tree不会破坏模型的子项

如何解决《acts_as_tree不会破坏模型的子项》经验,为你挑选了0个好方法。

我有这个任务模型:

class Task < ActiveRecord::Base
  acts_as_tree :order => 'sort_order'
end

我有这个测试

class TaskTest < Test::Unit::TestCase
  def setup
    @root = create_root
  end

  def test_destroying_a_task_should_destroy_all_of_its_descendants
    d1 = create_task(:parent_id => @root.id, :sort_order => 2)
    d2 = create_task(:parent_id => d1.id, :sort_order => 3)
    d3 = create_task(:parent_id => d2.id, :sort_order => 4)
    d4 = create_task(:parent_id => d1.id, :sort_order => 5)
    assert_equal 5, Task.count

    d1.destroy

    assert_equal @root, Task.find(:first)
    assert_equal 1, Task.count
  end
end

测试成功:当我销毁d1时,它会破坏d1的所有后代.因此,在破坏之后只剩下根.

但是,在我向Task添加了before_save回调之后,此测试现在失败了.这是我添加到Task的代码:

before_save :update_descendants_if_necessary

def update_descendants_if_necessary
  handle_parent_id_change if self.parent_id_changed?
  return true
end

def handle_parent_id_change
  self.children.each do |sub_task|
    #the code within the loop is deliberately commented out
  end
end

当我添加此代码时,assert_equal 1, Task.count失败,用Task.count == 4.我认为self.children下面handled_parent_id_change是罪魁祸首,因为当我注释掉该self.children.each do |sub_task|块时,测试再次通过.

有任何想法吗?

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有