我有一个模型代表一个由组件组成的组件,组件可能(在它们自己的右边)也是组件。它看起来有点像这样:
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”方式吗?还有其他建议吗?
答案 0 :(得分:0)
我根本不懂铁轨。但是,听起来你几乎已经回答了自己的问题。
手头的问题自然适用于递归解决方案。
您说您已经将这些程序集引用视为树。
您有一个程序集作为树的根,以及一个分支列表作为它的组件。
当且仅当Node
下的任何节点都不包含ListOfAssemblies
中的任何程序集时,您才能返回包含(Node
,ListOfAssemblies
)的函数。这个函数可以递归调用自己,直到它到达一个叶子并返回。
您只需要弄清楚(1)其工作原理和(2)如何在代码中表示组件和程序集。
祝你好运!