属于帖子的自加入模型评论

时间:2018-09-15 14:08:19

标签: ruby-on-rails self-join

我有两个模型。我希望他们的行为像带有树状结构注释的帖子。

帖子:

class Post < ApplicationRecord
  has_many :comments
end

评论:

class Comment < ApplicationRecord
  belongs_to :post
  belongs_to :parent, class_name: 'Comment', optional: true
  has_many :children, class_name: 'Comment', foreign_key: 'parent_id'
end

当我通过

在控制台中创建评论时
post = Post.create(title: 'Title', content: 'text')
comment = post.comments.create(content: 'text')
child = comment.children.create(content: 'text')
pp child

这就是我得到的:

[22] pry(main)> child = comment.children.create(content: 'text')
   (0.2ms)  begin transaction
   (0.2ms)  rollback transaction
=> #<Comment:0x00007f16ec59cc20
  id: nil,
 content: "text",
 post_id: nil,
 parent_id: 5,
 created_at: nil,
 updated_at: nil>

我进行了一些尝试,但没有取得太大的成功,自我加入指南也无济于事。我的模型中缺少什么代码?

更新。

child未保存到数据库中。错误:["Post must exist"]。但是帖子存在。运行comment.children.new(content: 'text')时设置了帖子ID,如何创建类似children belongs_to :post, through: :parents的关联(伪代码)

1 个答案:

答案 0 :(得分:0)

您必须提及父母评论所属的帖子。

comment.children.new(content: "text", post: comment.post)

或者您也可以在模型的回调中执行此操作。

在models / comment.rb

before_save :set_post_id

private

def set_post_id
  self.post_id = post.id || parent.post.id
end