Je voudrais une association has_many qui fonctionne comme ceci:Ruby sur les associations Rails pour la théorie des ensembles (union, différence, intersection, etc.)
class Hood
acts_as_tree
has_many :houses, :union_with => :parent
end
class House
end
où une maison associée à capuchon 1 serait également retourné dans .houses
des subhoods de Hood 1, avec les associations individuelles des subhoods.
L'association n'a besoin de fonctionner que du point de vue du capot.
J'ai écrit une macro union_with_parent qui a donné l'effet désiré, mais beaucoup d'effets secondaires regrettables. Un problème majeur était que has_many :dependent => :destroy
a entraîné des suppressions imprévues; la suppression d'un subhood a également causé la suppression de toutes les maisons dans le parent Hood, puisque je viens de redéfinir la méthode houses
.
Problème similaire avec une macro de différence d'ensemble, sauf qu'aucune des maisons du sous-sol n'a été détruite. (Pensez à ceci comme un masque.) Alors un sous-règne contiendrait toutes les maisons dans le parent, sauf celles qui sont dans la base de données comme appartenant à la sous-unité. Le comportement que je voudrais: seul le contenu du masque est détruit.)
J'ai pensé à écrire une macro has_many_union
, mais il semble que toutes les associations sont assez impliquées .
Est-ce que je fais ça bêtement? Y a-t-il un moyen plus facile? Ou devrais-je redéfinir radicalement? (Je préférerais ne pas re-concevoir, car le transfert des données n'est pas idéal.)
(Pour le compte rendu, oui, je sais que cette métaphore est nulle. Peut-être que vous connaissez tous une meilleure façon d'obtenir l'effet désiré?
Excuses, vous avez raison. Cela aurait dû être un super-héros. =) –