如何在Rails中将模型对象设置为自己的属性?

时间:2013-11-11 22:41:39

标签: ruby-on-rails ruby activerecord

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

我可以这样做:

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

但我希望在一个查询中完成所有操作。我该怎么做?

4 个答案:

答案 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)

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