J'ai une table de jointure et j'aimerais que les deux associations belongs_to soient polymorphes. La relation regarderait comme suit:Double association polymorphique dans les rails
La structure de classe ressemblerait comme suit:
Class Tagable1 < ActiveRecord::Base
has_many :taggings
has_many :tag_group_1s, :through => :taggings
has_many :tag_group_2s, :through => :taggings
...
end
Class TagGroup1 < ActiveRecord::Base
has_many :taggings
has_many :taggable_1s, :through => :taggings
has_many :taggable_2s, :through => :taggings
...
end
Class Tagging < ActiveRecord::Base
belongs_to :taggable, :polymorphic => true
belongs_to :tag, :polymorphic => true
end
Il y a des inconvénients évidents à cette approche, en particulier la lourde charge sur la table des marquages. Ce que j'essaye de réaliser est une conception flexible qui me permet de créer de nouveaux Taggables ou TagGroups sans créer de nouvelles tables de jointure. Par exemple, sans le double polymorphe, Taggable1 aurait besoin d'une table Taggable1Taggings pour rejoindre Taggable1 avec les TagGroups polymorphes. De même, j'aurais besoin Taggable2Taggings, Taggable3Taggings, Taggable4Taggings, etc etc
J'aimerais être éclairé s'il y a des inconvénients que je ne pense pas.
Qu'est-ce que vous étiquetez et qu'est-ce qu'un groupe de marques? Difficile d'offrir des conseils si vous ne partagez pas votre design actuel. – molf
Taggables pourrait être un billet de blog, vidéo, nourriture ou une recette. Un TagGroup pourrait être un Food Groups pour lequel les éléments (auto-référentiels) seraient "Meats", un autre "Dairy", etc. Un autre TagGroup pourrait être des Restrictions Diététiques pour lesquelles les éléments (auto-référentiels) seraient "Gluten Free", un autre "Peanut Free", etc. – Mike
Et quelle est exactement votre question? Vous voulez savoir si votre solution est un bon choix? –