【问题标题】:Looking for a simple test for circular reference in a recursive model在递归模型中寻找循环引用的简单测试
【发布时间】:2010-10-15 20:26:11
【问题描述】:

我有一个模型,它表示由组件组成的组件,组件(就其本身而言)也可能是组件。看起来有点像这样:

class Component < ActiveRecord::Base
  belongs_to :assembly, :class_name => "Component", :foreign_key => :assembly_id
  has_many :pieces, :class_name => "Component", :foreign_key => :assembly_id
end

我想确定,当我将一个组件添加到程序集时,添加的不是程序集本身,也不是链上的另一个程序集。实际上,无论您向下多少层,程序集都不能包含自己。

我的想法是在保存组件时遍历向上的树以查找组件本身作为父级、祖父级等。我试图避免循环引用。

有没有一种“简单的 Rails-ish”方式来做到这一点?还有其他建议吗?

【问题讨论】:

    标签: ruby-on-rails recursion circular-reference


    【解决方案1】:

    我根本不知道轨道。不过,听起来您几乎已经回答了自己的问题。

    手头的问题自然适合递归解决方案。

    您说您已经将这些程序集引用视为一棵树。

    您有一个程序集作为树的根,还有一个分支列表作为它的组件。

    您可以有一个函数 contains(Node, ListOfAssemblies) 当且仅当 Node 下的节点不包含 ListOfAssemblies 中的任何程序集时才返回 true。这个函数可以递归调用自己,直到它到达一个叶子并返回。

    您只需要弄清楚 (1) 其工作原理的逻辑以及 (2) 您的组件和程序集将如何在代码中表示。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 2020-11-25
      • 1970-01-01
      相关资源
      最近更新 更多