У меня есть модель, которая представляет собой сборку, состоящую из компонентов, компоненты могут (сами по себе) также быть сборками. Это выглядит примерно так:
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-иш" способ сделать это? Любые другие предложения?