黑客新闻rails clone:关于建模链接,评论和投票之间关系的建议

时间:2011-03-01 22:26:52

标签: ruby-on-rails database-design data-modeling

我喜欢Rails,但我们刚开始约会。

用户可以对链接和评论进行投票。除了主键和时间戳之外,我目前还为这些模型定义了以下属性:

  • 链接网址,标题,submitter_id,得分
  • 评论内容,commenter_id,得分,link_id,parent_comment_id
  • 投票 id,voter_id,link_id,direction

我刚刚添加了评论模型并思考如何将其与投票相结合。一些选择:

  1. 将链接和评论折叠到单个“项目”模型中,并将投票映射到通用item_id
  2. 有两个投票表,一个用于评论,一个用于链接
  3. 将comment_id列添加到现有投票表
  4. 不确定什么是最好的。 #1和#3引入了两用表,即表中的某些列仅与该表中的行的子集相关。 #2避免了这个问题,但似乎多余而愚蠢。

    权衡是不可避免的还是我没有看到黄金道路?你会推荐什么?如果您碰巧知道github上的rails存储库处理类似的情况,我真的很感激链接!

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找的是多态关联。在你的情况下,就像这样简单:

class Vote < ActiveRecord::Base
  belongs_to :votable, :polymorphic => true
end

class Link < ActiveRecord::Base
  has_many :votes, :as => :votable
end

class Comment < ActiveRecord::Base
  has_many :votes, :as => :votable
  #...
end

您的投票表应如下所示:

id           : integer
votable_id   : integer 
votable_type : string # Comment || Link

在这里你有一个关于它的Railscast:Polymorphic Associations Railscast