1

これは一般的な Ruby の質問だと思いますが、私の場合、関連するオブジェクトは ActiveRecord モデルです。

別のモデル内にネストできるモデルがある場合、モデルのネストの深さをどのように判断できますか?

いいえ:

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

では、foo3 レベルの深さでネストされたモデルがあるとします (上記のように)。呼び出すfoo.parent.parent.parentと、ルート モデルが取得されます。

foo.depthfoo とそのルートの間にいくつのレベルがあるかを返すようなメソッドを定義するにはどうすればよいでしょうか?

ありがとう!

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 に答える