在问之前,我必须说我真的在网上试图找到答案,但我没有发现任何解决了我的问题。 Answers like that无法解决我的问题,因为我不想指定source_type
,我想要一个通用的东西 - 你会明白的。
好的,我们走了。我在我的项目中使用了“多对多的多态”关系,但我无法让它工作。在尝试使用多态之前,这只是一个“多对多”关系并且工作得很好,所以我想保留结构,只是添加多态。
多对多:user
和visitor
有许多subject
,反之亦然。我们假设user
和visitor
followers
,subject
followed
。
关系表:此对象具有称为“psrelations”(人物 - 主题关系)的关系表。该表存储多对多关系。
psrelations.rb:
attr_accessible :followed_id, :follower_type, :follower_id
belongs_to :follower, polymorphic: true
belongs_to :followed, class_name: "Subject"
user.rb:
has_many :psrelations, as: :follower, dependent: :destroy
has_many :followed_subjects, through: :psrelations, source: :followed
visitor.rb:
has_many :psrelations, as: :follower, dependent: :destroy
has_many :followed_subjects, through: :psrelations, source: :followed
subject.rb中
has_many :psrelations, as: :followed, dependent: :destroy
has_many :followers, through: :psrelations, source: :follower
我希望“关注者”返回所有“访问者”和“用户”,而不仅仅是指定source_type。
一切似乎都没问题,但当我尝试self.followers.include?(person)
(人可以是用户或访客)时,我得到了:
Cannot have a has_many :through association 'Subject#followers' on the polymorphic object 'Follower#follower'.
我做错了什么?