Резьбовые комментарии - неопределенный метод `children 'для WillPaginate - PullRequest
0 голосов
/ 09 сентября 2010

Следующая проблема была исправлена, я добавил 's' в конце комментариев, когда это должен быть просто комментарий, но в нижней части этого сообщения возникла новая проблема.

Я пытаюсь получить многопоточные комментарии для моей уже существующей системы комментариев, следуя ответу на вопрос этого человека: Вложенные / резьбовые / отступовые комментарии в стиле Reddit для Rails? Когда я пытаюсь получить доступ к моей странице показа статьи, я получаю следующую ошибку: неопределенный метод `children 'для # Вот вид с моей страницы показа статьи, который проблематичен:

<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,9 мс) Отрендеренные комментарии / _comment.html.erb (2,0 мс) Отрендеренные комментарии / _comment.html.erb (7,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 => 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. Кстати, это внутри a для каждого цикла, который проходит по массиву комментариев. Я хочу что-то вроде "commentable_comment_path" или "new_commentable_comment_path", чтобы я мог использовать его для своих других моделей.

Еще один быстрый вопрос, это исправит мою ссылку «ответить»? Я не уверен, правильно ли я это делаю. Я хочу, чтобы ссылка ответа создала комментарий в комментарии.

Большое вам спасибо.

1 Ответ

1 голос
/ 09 сентября 2010

parent_id, как вы предлагаете, является целочисленной ссылкой на объект.Чтобы получить дочерние элементы для объекта a, вы должны искать все объекты, которые имеют parent_id из a.id.

. Что касается проблемы с рендерингом: @comments - это массив объектов комментариев.- вы, по сути, попросили страницу комментариев, используя paginate.Я думаю, что вы хотите сделать комментарии сами, в этом случае :collection => @comments выполнит эту работу.Это просто означает использование частичного для каждого элемента в коллекции.Затем частичное позаботится об отображении дочерних элементов каждого комментария согласно связанному ответу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...