Rails&通过部分嵌套注释,奇怪的递归

时间:2015-10-01 16:07:12

标签: ruby-on-rails-4 partials

我为(多态)评论模型设置了一个非常简单的设置,它本身也有一个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

不知何故,这会产生一些奇怪的再现,其中回复会显示在正确的位置,但也会显示在错误的位置。问题是,这似乎没有任何逻辑。 (至少对我而言,它没有)

我已经检查过控制台以验证数据库是否包含记录之间的正确关系(没有错误的记录),因此它必须在演示文稿/部分调用中。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好吧,那当然是我自己的愚蠢错误...调用@ commentable.comments.all()结果是所有注释,所以即使是嵌套注释也显示为顶级注释。

短期通过添加where(comment_id:nil)

来修复它