我认为这是一个普遍的红宝石问题,但在我看来,涉及的对象是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与其根之间有多少级别?
谢谢!
答案 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?
进行一些检查。