Rails中的双多态关联

时间:2011-10-06 20:53:19

标签: ruby-on-rails ruby database polymorphism

我有一个连接表,我希望belongs_to关联都是多态的。这种关系看起来如下:

Double Polymorhpic

类结构如下所示:

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

这种方法存在明显的缺点,特别是Taggings表上的负载很重。我想要实现的是灵活的设计,它允许我创建新的Taggables或TagGroups而无需创建新的连接表。例如,如果没有双重多态,Taggable1将需要Taggable1Taggings表来将Taggable1与多态TagGroups连接起来。同样,我需要Taggable2Taggings,Taggable3Taggings,Taggable4Taggings等等。

如果有一些我没想到的缺点,我希望能够开悟。

2 个答案:

答案 0 :(得分:0)

我不确定它是否与Rails 3兼容,但你想要has_many_polymorphs gem:

https://github.com/fauna/has_many_polymorphs

这个fork声称与Rails 3兼容:

https://github.com/jystewart/has_many_polymorphs

答案 1 :(得分:0)

似乎acts-as-taggable-on gem可以让您的生活更轻松。