我为(多态)评论模型设置了一个非常简单的设置,它本身也有一个has_many关系(称为:回复):
# comment.rb
class Comment < ActiveRecord::Base
belongs_to :commentable, polymorphic: true
default_scope -> { order(created_at: :asc) }
belongs_to :user
belongs_to :comment_parent, class_name: "Comment", foreign_key: "comment_id"
has_many :replies, class_name: "Comment", foreign_key: "comment_id"
validates :content, presence: true
validates :commentable, presence: true
end
在帖子控制器中我获取评论:
@comments = @commentable.comments.all()
我在博客视图页面上启动了部分内容,如下所示:
= render @comments
最后注释/ _comment部分包含:
(简单的代码,这只显示gravatar&amp; username)
# comment/_comment.html.haml
%ol.media-list
%li.media{:class => ("media-replied" if comment.comment_id)}
= link_to gravatar_for(comment.user, size: 80, class_name: 'media-object img-circle'), comment.user, class: 'pull-left'
= render partial: 'comments/comment', collection: comment.replies
不知何故,这会产生一些奇怪的再现,其中回复会显示在正确的位置,但也会显示在错误的位置。问题是,这似乎没有任何逻辑。 (至少对我而言,它没有)
我已经检查过控制台以验证数据库是否包含记录之间的正确关系(没有错误的记录),因此它必须在演示文稿/部分调用中。
有什么想法吗?
答案 0 :(得分:0)
好吧,那当然是我自己的愚蠢错误...调用@ commentable.comments.all()结果是所有注释,所以即使是嵌套注释也显示为顶级注释。
短期通过添加where(comment_id:nil)
来修复它