我对如何将数据库建模为以下结构存在疑问:
我的帖子中有评论,此评论可能有也可能没有多个子评论,这些子评论可以有很多评论/子评论等等。
我的结构的一个例子:
我知道我必须有一个评论表,但我不确定我是否必须通过表子评论创建一个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; #
答案 0 :(得分:0)
我会使用自引用模型,例如:
class Comment < ActiveRecord::Base
belongs_to :parent, :class_name => "Comment"
has_many :child_comments, :class_name => "Comment", :foreign_key => "parent_id"
end
这将创建一个树结构模型,其中每个注释都属于父级。