线程注释 - WillPaginate的未定义方法`children'

时间:2010-09-08 22:20:15

标签: ruby-on-rails

以下问题已得到解决,我在评论结尾处添加了一个's',当它应该只是评论时,但是在这篇帖子的底部出现了一个新问题。

我正在尝试通过关注此人的问题的答案来获取我现有评论系统的线索评论:Reddit-style nested/threaded/indented comments for Rails? 当我尝试访问我的文章显示页面时,我收到以下错误:未定义的方法`children'for# 以下是我的文章展示页面中存在问题的视图:

<div id="comment <%= comment.id %>">
  <%= comment.title %>
  | <%= link_to "Edit Comment", edit_article_comment_path(@commentable, comment) %>
  | <%= link_to 'Delete Comment', [@commentable, comment], :confirm => "Are you sure?", :method => :delete %><br />
  <%= comment.content %><br />
  **<%= render :partial => 'comments/comment', :collection => @comments.children %>**
  <%= comment.user.name %><br /><br />
</div>

这是渲染部分有问题。 如果我从评论中取出孩子的一部分,我会在我的控制台中得到这个: 递归永远不会停止。我明白了:渲染的注释/ _form.html.erb(14.9ms)渲染的注释/ _comment.html.erb(2.0ms)渲染的注释/ _comment.html.erb(7.3ms)渲染的注释/ _comment.html.erb(12.3) ms)呈现的评论/ _comment.html.erb(17.9ms)呈现的评论/ _comment.html.erb(22.3ms)呈现的评论/ _comment.html.erb(26.8ms)呈现的评论/ _comment.html.erb(31.6ms)呈现评论/ _comment.html.erb(36.2ms).... 我不知道为什么它会继续渲染。 没有评论有孩子,所以它应该停止。 这是文章控制器的'show'部分:

def show     @article = Article.find(params [:id])     @commentable = Article.find(params [:id])     @comments = @ commentable.comments.paginate(:page =&gt; params [:page])     @comment = Comment.new     @title = @ article.title   端

我唯一的解释是,也许没有任何儿童评论,所以will_paginate不知道如何处理它,所以它会给我一个错误。


新问题,我遇到了评论路由问题。我正在为我的注释使用多态关联,因此它们可以用于不同的模型(文章,配置文件,图片等),但我不知道如何在我的视图中创建路由路径。 这就是我现在所拥有的:

<div id="comment <%= comment.id %>">
  <%= comment.title %>
  | <%= link_to "Permalink", article_comment_path(@commentable, comment) %>
  | <%= link_to "Reply", new_article_comment_path(@commentable, @comment_child) %>
  | <%= link_to "Edit Comment", edit_article_comment_path(@commentable, comment) %>
  | <%= link_to 'Delete Comment', [@commentable, comment], :confirm => "Are you sure?", :method => :delete %><br />
  <%= comment.content %><br />
  <%= comment.user.name %><br /><br />
  <%= render :partial => 'comments/comment', :collection => @comment.children %>
</div>

存在大量的路径错误,这些错误不适用于其他模型。我正在使用:article_comment_path,new_article_comment_path和edit_article_comment_path。顺便说一下,这是针对每个循环的内部循环,循环遍历注释数组。我想要“commentable_comment_path”或“new_commentable_comment_path”,所以我可以将它用于其他模型。

还有一个问题,这会修复我的“回复”链接吗?我不确定我是否正确。我希望回复链接在评论中创建评论。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

parent_id正如您所建议的那样是对象的整数引用。要让孩子获得对象a,您需要查找parent_id a.id的所有对象。

至于渲染问题:@comments是一个评论对象数组 - 您基本上使用paginate要求提供评论页面。我想你想自己渲染评论,:collection => @comments将完成这项工作。这只是意味着对集合中的每个项目使用partial。然后,部分将根据链接的答案来处理每个评论的孩子。