我有两个模型。我希望他们的行为像带有树状结构注释的帖子。
帖子:
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
的关联(伪代码)
答案 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