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っぽい」方法はありますか? 他の提案はありますか?

4

1 に答える 1

0

レールは全く知りません。ただし、自分の質問にほとんど答えたようです。

当面の問題は、当然、再帰的な解決策に役立ちます。

これらのアセンブリ参照は、すでにツリーであると考えているとおっしゃいました。

ツリーのルートとして単一のアセンブリがあり、そのコンポーネントとしてブランチのリストがあります。

の下のノードにアセンブリが含まれていない場合にのみ true を返す関数 contains( Node, ) を使用できます。この関数は、葉に到達して戻るまで、再帰的に自分自身を呼び出すことができます。ListOfAssembliesNodeListOfAssemblies

(1) これがどのように機能するかのロジックと、(2) コンポーネントとアセンブリがコードでどのように表現されるかを理解する必要があります。

幸運を!

于 2010-10-18T16:54:48.493 に答える