The issue here is that rails doesn't seem to want to apply the ":dependent => :destroy" across the indirect :through relationship. The join/extension table gets deleted, but the underlying hostgroup does now. We've tried this both ways, but the custom method is the only one that actually does what we need here, unless we've missed something.