Ruby on rails Rails中的双多态关联
我有一个联接表,我希望两个关联都是多态的。这种关系如下所示:Ruby on rails Rails中的双多态关联,ruby-on-rails,ruby,database,polymorphism,Ruby On Rails,Ruby,Database,Polymorphism,我有一个联接表,我希望两个关联都是多态的。这种关系如下所示: 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_
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
班级结构如下所示:
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
Class Tagable1:标记
有多个:标记\u组\u 2s,:通过=>:标记
...
结束
类TagGroup1:标记
有多个:标记2,:通过=>:标记
...
结束
类标记true
属于:标记,:多态=>true
结束
这种方法有明显的缺点,尤其是标记表上的重载。我试图实现的是一种灵活的设计,它允许我创建新的标记或标记组,而无需创建新的联接表。例如,如果没有双多态标记,Taggable1将需要一个Taggable1Taggings表来将Taggable1与多态标记组连接起来。同样,我需要标记2标记、标记3标记、标记4标记等
如果有我没有想到的缺点,我很想得到启发。我不确定它是否与Rails 3兼容,但您想要的是“有很多变形”宝石: 此分叉声称与Rails 3兼容:
我不确定它是否与Rails 3兼容,但您想要的是具有多种变形的宝石: 此分叉声称与Rails 3兼容:
似乎这项技术可以让你的生活更轻松 看来这会让你的生活更轻松 你在标记什么?标记组是什么?如果你不分享你的实际设计,很难提供建议。标签可能是博客文章、视频、食物或食谱。一个标记组可能是食物组,其中(自我参考)元素为“肉”,另一个为“奶制品”,等等。另一个标记组可能是饮食限制,其中(自我参考)元素为“无麸质”,另一个为“无花生”,等等。您的问题是什么?您想知道您的解决方案是否是一个好的选择?使用双多态联接是否有缺点?您标记的是什么?标记组是什么?如果你不分享你的实际设计,很难提供建议。标签可能是博客文章、视频、食物或食谱。一个标记组可能是食物组,其中(自我参考)元素为“肉”,另一个为“奶制品”,等等。另一个标记组可能是饮食限制,其中(自我参考)元素为“无麸质”,另一个为“无花生”,等等。您的问题是什么?您想知道您的解决方案是否是一个好的选择?使用双多态联接是否有缺点?在外观上充当标记,但它似乎无法告诉您反向标记关系。例如,如果我有标签“蓝色”,我可以做User.tagged_with('blue')和Admin.tagged_with('blue'),但我不能做tag.find('blue')。tagged_项目会给我所有用户和所有管理员。acts-as-taggable-on看起来很棒,但它似乎无法告诉你标签的反向关系。例如,如果我有标签“蓝色”,我可以做User.tagged_with('blue')和Admin.tagged_with('blue'),但我不能做tag.find('blue')。tagged_项目,它将为我提供所有用户和所有管理员。感谢此链接!他们的标签系统和我一样。我只是不能让自己使用它,考虑到它是多么过时。感谢这个链接!他们的标签系统和我一样。考虑到它有多过时,我就是无法让自己使用它。