Ruby / Rails:确定对象的嵌套深度

时间:2011-03-04 16:06:13

标签: ruby activerecord model nested depth

我认为这是一个普遍的红宝石问题,但在我看来,涉及的对象是ActiveRecord模型。

如果我的模型可以嵌套在另一个模型中,我如何确定模型的嵌套深度?

IE:

Model Root (Level 0)
- Model Level 1
- - Model Level 2
- - Model Level 2
- - Model Level 2
- - - Model Level 3
- - - Model Level 3
- Model Level 1
- Model Level 1

让我们说foo是嵌套三层深的模型(如上所示)。如果我打电话给foo.parent.parent.parent,我会得到根模型。

我如何定义一个方法,如:foo.depth,它将返回foo与其根之间有多少级别?

谢谢!

2 个答案:

答案 0 :(得分:4)

这样的事情可以解决问题:

def depth
  parent.nil? ? 0 : 1+parent.depth
end

答案 1 :(得分:0)

您需要创建recursive method。类似的东西:

class Sample

  attr_accessor :parent

  def depth

    # Base case.
    return 0 if parent.nil?

    # Recursive case.
    return parent.depth + 1

  end

end

这假设您的父类将始终响应“深度”。如果没有,您需要对respond_to?进行一些检查。