0

我想使用一个模型/表来构建一棵树。我有一个名为的模型Node和一个属性root。对于根节点,我想将其设置为root.

我可以这样做:

n = Node.new root:0
# save new query
n.save
n.root = n.id
# save update query
n.save

但我想在一个查询中完成这一切。我该怎么做呢?

4

4 回答 4

0

可能只能通过回调,因为对象必须在获取之前保存。

于 2013-11-12T00:43:24.033 回答
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 属性。当它为 nil 时,意味着 Node 是根。

于 2013-11-11T22:44:48.090 回答
0

您不能在单个数据库操作中执行此操作,因为在保存发生之前不会分配 id,并且在该点之后 id 才可用。您可以使用工厂机制(例如 FactoryGirl)在单个工厂操作中使用工厂机制的“保存后”挂钩来执行此操作。

于 2013-11-11T22:45:37.173 回答
0

after_commit使用回调可能是这样的:

after_commit :set_root, :on => :create
def set_root
   self.update_attribute(:root_id, self.id) if root_id == 0
end
于 2013-11-11T23:10:28.627 回答