自引用关联(Ruby on Rails)

时间:2010-09-24 05:06:59

标签: ruby-on-rails activerecord associations

我想创建一个系统供用户评论评论也可以有回复的帖子。由于我不能做自我参照的HABTM关系,我做了一些研究,看到我应该以这种方式去做:

Post
  has_many :comments
end

Comment
  belongs_to :user
  belongs_to :post
  has_many :replies, :class_name => 'Comment'
end

我知道这不是100%正确(这就是我要问的原因)。如果有人可以告诉我如何建立这种关系以及我将如何创建迁移,我会很感激!!谢谢!

2 个答案:

答案 0 :(得分:3)

最简单的解决方案是使用acts_as_tree插件。很容易看出它是如何实现的,但基本上你需要在模型上添加自引用belongs_toparent_id列。 (带有nil parent_id的评论是顶级评论;不是回复。)

答案 1 :(得分:1)

假设还可以回复回复,那么您将收到一条评论树。因此,我建议您使用acts_as_tree

Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :post
  acts_as_tree :order => 'created_at'
end