1

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

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”方式来做到这一点?还有其他建议吗?

4

1 回答 1

0

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

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

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

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

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

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

祝你好运!

于 2010-10-18T16:54:48.493 回答