【问题标题】:Ruby / Rails: determine how deeply nested an object isRuby / Rails:确定对象的嵌套深度
【发布时间】:2011-03-04 16:06:13
【问题描述】:

我认为这是一个普遍的 ruby​​ 问题,尽管在我的例子中涉及的对象是 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 和它的根之间有多少层?

谢谢!

【问题讨论】:

    标签: ruby activerecord model nested depth


    【解决方案1】:

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

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

    【讨论】:

    • 哇!简单,优雅,非常红宝石。这很好用,谢谢!
    【解决方案2】:

    您需要创建一个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? 进行一些检查。

    【讨论】:

    • 凯文,感谢您的回答,这是一个有用的阐述。这与 Ogz 向导的答案相同,但我选择了他,因为我喜欢三元运算符,而且你的声望比他高 4000 :) 不过谢谢!!
    • 也感谢respond_to? 的提示。在我的例子中,所有的物体都会对深度做出反应,但这是一个很好的提醒!
    猜你喜欢
    • 2017-08-27
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多