2010-09-08 4 views
0
WillPaginate

Le problème suivant a été corrigé, j'ai ajouté un « s » à la fin des commentaires, quand il devrait juste être un commentaire, mais un nouveau problème a surgi au bas de poster.Commentaires filetés - méthode non définie des enfants » pour

Je suis en train d'obtenir des commentaires filetés pour mon système de commentaires déjà existant en suivant la réponse à la question de cet homme: Reddit-style nested/threaded/indented comments for Rails? Lorsque je tente d'accéder à mon article à la page show, je reçois l'erreur suivante: méthode non définie des enfants » pour # Voici la vue de mon article page montrent que pose problème:

<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> 

Il est la partie qui rend a un problème. Si je sors la partie enfants des commentaires, je reçois ceci dans ma console: La récursivité ne s'arrête jamais. Je reçois ceci: Commentaires rendus/_form.html.erb (14.9ms) Commentaires rendus/_comment.html.erb (2.0ms) Commentaires rendus/_comment.html.erb (7.3ms) Rendu des commentaires/_comment.html.erb (12.3 ms) Rendu des commentaires/_comment.html.erb (17.9ms) Commentaires rendus/_comment.html.erb (22.3ms) Commentaires rendus/_comment.html.erb (26.8ms) Commentaires rendus/_comment.html.erb (31.6ms) Commentaires rendus/_comment.html.erb (36.2ms) .... Je ne sais pas pourquoi ça continue le rendu. Aucun des commentaires n'a d'enfants, donc cela devrait s'arrêter. est ici la partie 'show' du contrôleur de l'article:

montrent def = @article Article.find (params [: id]) @commentable = Article.find (params [: id]) @comments = @ commentable.comments.paginate (: page => params [: page]) @comment = Comment.new @title = @ article.title fin

Ma seule explication est que peut-être il n'y a pas d'enfants commentaires, donc will_paginate ne sait pas quoi en faire, donc il me jette une erreur.


Nouveau problème, j'ai un problème de routage des commentaires. J'utilise des associations polymorphes pour mes commentaires afin qu'ils puissent être utilisés pour différents modèles (articles, profils, images, etc.), mais je ne sais pas comment créer les chemins de routage à mon avis. Voici ce que j'ai maintenant:

<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> 

Il y a un nombre abondant d'erreurs de Pathing qui ne fonctionnent pas pour les autres modèles. J'utilise: article_comment_path, new_article_comment_path et edit_article_comment_path. En passant, c'est à l'intérieur d'un pour chaque boucle, qui boucle sur un tableau de commentaires. Je veux quelque chose comme "commentable_comment_path" ou "new_comment_comment_path", donc je peux l'utiliser pour mes autres modèles.

Encore une question rapide, cela va-t-il réparer mon lien "réponse"? Je ne suis pas sûr si je le fais bien. Je veux que le lien de réponse crée un commentaire dans un commentaire.

Merci beaucoup.

Répondre

1

parent_id comme vous le suggérez est une référence entière à un objet. Pour obtenir les enfants pour un objet a vous rechercheriez tous les objets qui ont un parent_id de a.id. En ce qui concerne le problème avec le rendu: @comments est un tableau d'objets de commentaires - vous avez essentiellement demandé une page de commentaires en utilisant paginate.Je suppose que vous voulez rendre les commentaires eux-mêmes dans quel cas :collection => @comments fera le travail. Cela signifie simplement d'utiliser le partiel pour chaque élément de la collection. Le partiel prendra alors soin de rendre les enfants de chaque commentaire selon la réponse liée.

+0

modifier: oops, je ne sais pas qui a écrit posté une réponse. La récursivité ne s'arrête jamais. Je reçois ceci: commentaires crépis/_form.html.erb (14.9ms) commentaires crépis/_comment.html.erb (2.0ms) commentaires crépis/_comment.html.erb (7.3ms) commentaires crépis/_comment.html. erb (12.3ms) Commentaires rendus/_comment.html.erb (17.9ms) Commentaires rendus/_comment.html.erb (22.3ms) Commentaires rendus/_comment.html.erb (26.8ms) Rendu des commentaires/_comment. html.erb (31.6ms) Commentaires rendus/_comment.html.erb (36.2ms) .... Je ne sais pas pourquoi ça continue à être rendu. Aucun des commentaires n'a d'enfants, donc ça devrait s'arrêter. – Kelp

+0

Ah, avez-vous remplacé ': collection => comments.children' dans le partiel avec le code dans ma réponse? Je voulais dire le code dans votre vue de niveau supérieur. Pour être honnête, je suis sûr qu'il devrait être 'comment.children' dans la partie partielle au lieu de' comments.children'. – Shadwell

+0

Haha, ouais c'était un mauvais placement des 's' dans les commentaires. Ce devrait seulement être "commentaire". J'ai oublié, c'était dans une boucle "pour chaque commentaire dans les commentaires". Merci. Aussi, j'ai un autre problème, je vais éditer le post principal avec des informations à ce sujet. – Kelp

Questions connexes