0

考虑一个类:

class Link < ActiveRecord::Base

  has_many :link_votes, :as => :vote_subject, :class_name => 'Vote'
  has_many :spam_votes, :as => :vote_subject, :class_name => 'Vote'

end

问题是,当我使用 is 添加新投票时@link.link_votes << Vote.newvote_subject_type'Link'希望它可以是'link_votes'或类似的东西。这是 AR 限制还是有办法解决这个问题?

我实际上找到了一个相关的答案,但我不太确定它说的是什么:多态关联与同一模型上的多个关联

4

1 回答 1

0

听起来您想使用单表继承 - 这将允许您拥有两种不同类型的投票。这将在投票表中添加一个“类型”列,然后您将作为 LinkVote 或 SpamVote 访问该列

class SpamVote << Vote
  ...
end

沿着这些思路。

class Link < ActiveRecord::Base

  has_many :link_votes, :as => :vote_subject
  has_many :spam_votes, :as => :vote_subject

end

在投票表中,您会看到如下列:

id, type, vote_subject_type, vote_subject_id, etc.

对 STI 进行更多研究,我打赌你会找到答案。

于 2009-12-29T23:18:53.107 回答