我有一个使用充当树的模型。例如:
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
这是设计使然吗?也就是说,我们总是期望设置互惠关系的两个部分吗?
编辑:
相关问题