Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中的双多态关联_Ruby On Rails_Ruby_Database_Polymorphism - Fatal编程技术网

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_项目,它将为我提供所有用户和所有管理员。感谢此链接!他们的标签系统和我一样。我只是不能让自己使用它,考虑到它是多么过时。感谢这个链接!他们的标签系统和我一样。考虑到它有多过时,我就是无法让自己使用它。