db设计:一般评论,几种类型的帖子

时间:2011-05-18 22:52:04

标签: ruby-on-rails database ruby-on-rails-3 database-design

我有几个表,比方说:文章,想法和页面,我希望能够为每个表添加评论。 我应该为表格中的每一个添加注释表(articles_comments,pages_comments ...),或者以某种方式为各种数据做一般注释表(如果可以的话,plz扩展如何在rails中实现)

我有想法做包含

的评论表
  

[评论] ID,MODEL,MODEL_ID,   USER_ID,TEXT

虽然模型包含目标表(articles / posts ...)和model_id表中的外来id,是不是很好的解决方案? 问题是我不知道如何在rails中实现这样的模型。

我也想知道Facebook如何实现他们的帖子db。 fb用户可以发布任何类型的数据(问题/状态/民意调查/图片),它只适用于当前订单和评论的供稿表。

2 个答案:

答案 0 :(得分:1)

创建一个通用的Comment模型并使其具有多态性:

class Comment < ActiveRecord::Base
  belongs_to :commentable, :polymorphic => true
end

class Article < ActiveRecord::Base
  has_many :comments, :as => :commentable
end

class Thought < ActiveRecord::Base
  has_many :comments, :as => :commentable
end

Article模型的实例中,您可以检索一组评论:@article.comments

如果您拥有Comment模型的实例,则可以通过@comment.commentable

访问其父级

要使其工作,您需要在声明多态接口的模型中声明外键列和类型列:

class CreateComments < ActiveRecord::Migration
  def self.up
    create_table :comments do |t|
      t.text       :content
      t.references :user
      t.references :commentable, :polymorphic => true
      t.timestamps
    end
  end

  def self.down
    drop_table :comments
  end
end

答案 1 :(得分:0)

我怀疑“文章”,“思想”和“页面”更像是不相似的,也许应该在一个表格中。然后这个问题就消失了。