Я бы хотел ассоциацию has_many, которая работает следующим образом:
class Hood
acts_as_tree
has_many :houses, :union_with => :parent
end
class House
end
где любой Дом, связанный с Капюшоном 1, также будет возвращен в .houses
субстанций Капюшона 1 вместе с отдельными ассоциациями субстанций.
Ассоциация должна работать только с точки зрения Капюшона.
Я написал макрос union_with_parent, который дал желаемый эффект, но много нежелательных побочных эффектов. Основная проблема заключалась в том, что has_many :dependent => :destroy
привело к непредвиденным удалениям; удаление субтитра также вызвало удаление всех домов в родительском колпаке, поскольку я просто переопределил метод houses
.
Схожая проблема с макросом разности множеств, за исключением того, что ни один из домов субстанции не был разрушен. (Подумайте об этом как о маске. Таким образом, в подсвободе будут все дома родительского колпака, за исключением тех, которые фактически перечислены в базе данных как принадлежащие субчастью. Опция :dependent => :destroy
приводит к разрушению всех родительских домов, но ни один из тех, кто находится в подземелье, так как мы снова переопределили дома. Поведение, которое я хотел бы: уничтожается только содержимое маски.)
Я думал о написании макроса has_many_union
, но похоже, что все ассоциации довольно сложны.
Я делаю это глупо? Есть ли более простой способ? Или я должен кардинально изменить дизайн? (Я бы действительно предпочел не переделывать дизайн, поскольку передача данных не идеальна.)
(Кстати, да, я знаю, что эта метафора отстой. Мой реальный дизайн не имеет смысла для большинства, поскольку это биоинформатика.)
Может быть, вы все знаете какой-нибудь лучший способ добиться желаемого эффекта?