评论和子评论结构的关联和模型

时间:2018-03-09 02:04:37

标签: ruby-on-rails

我对如何将数据库建模为以下结构存在疑问:

我的帖子中有评论,此评论可能有也可能没有多个子评论,这些子评论可以有很多评论/子评论等等。

我的结构的一个例子:

enter image description here

我知道我必须有一个评论表,但我不确定我是否必须通过表子评论创建一个has_many关系,或者通过自动重新排列来完成。谁能给你一个想法?

我添加了自我加入评论:

class Comment < ApplicationRecord
  belongs_to :user
  belongs_to :post
  belongs_to :parent, :class_name => "Comment"
  has_many :child_comments, :class_name => "Comment", :foreign_key => "parent_id"
end

我的其他型号是:

class Post < ApplicationRecord
  belongs_to :user
  has_many :comments
  validates :title, presence: true
  validates :body, presence: true
end


class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :posts
  has_many :comments
end

当我尝试使用以下内容创建新评论时

  

Comment.create(正文:&#39;评论&#39;,user_id:1,post_id:1,parent_id:1)

我得到了:

  

(0.6ms)BEGIN用户负载(66.0ms)SELECT&#34;用户&#34;。* FROM&#34;用户&#34;   用户&#34;。&#34; id&#34; = $ 1 LIMIT $ 2 [[&#34; id&#34;,1],[&#34; LIMIT&#34;,1]]发布   加载(35.8ms)SELECT&#34; posts&#34;。* FROM&#34; posts&#34;在哪里&#34;帖子&#34;。&#34; id&#34; = 1美元   LIMIT $ 2 [[&#34; id&#34;,1],[&#34; LIMIT&#34;,1]]注释加载(13.4ms)SELECT   &#34;评论&#34;。* FROM&#34;评论&#34;在哪里&#34;评论&#34;。&#34; id&#34; = $ 1 LIMIT $ 2   [[&#34; id&#34;,1],[&#34; LIMIT&#34;,1]](0.5ms)ROLLBACK   =&GT; #

1 个答案:

答案 0 :(得分:0)

我会使用自引用模型,例如:

class Comment < ActiveRecord::Base
  belongs_to :parent, :class_name => "Comment"
  has_many :child_comments, :class_name => "Comment", :foreign_key => "parent_id"
end

这将创建一个树结构模型,其中每个注释都属于父级。