我想使用一个模型/表格构建一个树。我有一个名为Node
的模型和一个属性root
。对于根节点,我想将其设置为root
。
我可以这样做:
n = Node.new root:0
# save new query
n.save
n.root = n.id
# save update query
n.save
但我希望在一个查询中完成所有操作。我该怎么做?
答案 0 :(得分:0)
听起来你想要这个宝石:https://github.com/rails/acts_as_tree
root = Category.create("name" => "root")
child1 = root.children.create("name" => "child1")
subchild1 = child1.children.create("name" => "subchild1")
基本上,您的Node模型将具有parent_id属性。当它为零时,意味着Node是根。
答案 1 :(得分:0)
您无法在单个数据库操作中执行此操作,因为在保存发生之前ID不会被分配,并且ID在该点之后才可用。您可以使用工厂(例如FactoryGirl)在单个工厂操作中使用工厂机制"保存"钩。
答案 2 :(得分:0)
使用after_commit
回调可能是这样的:
after_commit :set_root, :on => :create
def set_root
self.update_attribute(:root_id, self.id) if root_id == 0
end
答案 3 :(得分:0)
可能只有回调,因为在获取对象之前必须保存对象。