我有一个使用行为树的模型。例如:在提交数据库之前ActiveRecord关联是否有效?
class CartoonCharacter < ActiveRecord::Base
acts_as_tree
end
充当树有这些协会:
class ActsAsTree
belongs_to :parent
has_many :children
end
从脚本/控制台我建立我的树,节约了什么,直到整个树构造。我遇到的麻烦是在提交数据库之前,我无法成功导航树。致电#parent和#sibling会产生可疑的结果。我只能假设我错过了一些东西。
fred=CartoonCharacter.new(:name=>'Fred')
fred.children.build(:name => 'BamBam')
pebbles = fred.children.build(:name => 'Pebbles')
fred.children #=> [BamBam, Pebbles]
fred.children.last.parent #=> nil --- why not Fred?
pebbles.siblings #=> [completely unrelated records from db??]
我猜这与协会的处理方式有关。我会想象内存中的ActiveRecord结构将是完全可导航的,但它们似乎不是。从强制记录到控制台我有时会注意到,跨关联导航导致数据库访问。这使得很难知道如何环游协会。 (我简单地查看了查询缓存。)其他人如何处理这个问题?或者,你是否总是随时提交记录和他们的关系?这令人费解。
编辑:
什么的出现解决了这个问题,同时设置这两个关系。也就是说,缺失的部分是:
pebbles.parent = fred
bambam.parent = fred
这是故意破坏吗?也就是说,我们是否总是期望设定一个相互关系的两个部分?
编辑:
相关question
感谢您抽出宝贵的时间来打电话给我。即使我相信我已经正确设置了所有内容,但我仍无法完成工作。我确实通过对孩子使用after_add回调并在那里分配父项来得到这个工作。 – Mario 2009-08-30 00:22:42