1

我认为这是一个普遍的红宝石问题,尽管在我的情况下,所涉及的对象是 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 和它的根之间有多少级别?

谢谢!

4

2 回答 2

4

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

def depth
  parent.nil? ? 0 : 1+parent.depth
end
于 2011-03-04T16:13:55.137 回答
0

您需要创建一个递归方法。就像是:

class Sample

  attr_accessor :parent

  def depth

    # Base case.
    return 0 if parent.nil?

    # Recursive case.
    return parent.depth + 1

  end

end

这是假设您的父类将始终响应“深度”。如果没有,您需要对respond_to?.

于 2011-03-04T16:13:39.023 回答