我有几个表格,例如:文章,想法和页面,我希望能够为每个表格添加评论。我应该为表的每个表添加注释表(articles_comments,pages_comments...)还是以某种方式为各种数据做一般注释表(如果可以的话,请扩展如何在 rails 中实现它)
我有一个想法来做包含的评论表
[注释] ID, 型号, MODEL_ID, USER_ID,文本
虽然模型包含目标表(文章/帖子...)并在表中model_id外部ID,但它是好的解决方案吗?问题是我不知道如何在 rails 中实现这样的模型。
我还想知道Facebook是如何实现他们的帖子数据库的。FB用户可以发布任何类型的数据(问题/状态/民意调查/图片),并且它正好适合当前顺序和评论的提要表。
创建一个通用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
我怀疑"文章","思想"和"页面"更相似而不是不相似,也许应该在一个表格中。 然后这个问题就消失了。