コンポーネントで構成されるアセンブリを表すモデルがあります。コンポーネントは (それ自体が) アセンブリである場合もあります。次のようになります。
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っぽい」方法はありますか? 他の提案はありますか?