0

好的,所以我正在使用 Awesome 嵌套集在 Rails 上使用嵌套评论系统。我目前正在实现一个递归函数来使嵌套工作(我知道这对于性能来说非常低效,但我只是希望它在我调整性能之前工作)。

所以在我的应用程序控制器中,我有这样的东西(构建 html):

def create_comments_list(comment, commentlist)
  commentlist += "<div class=\"comment\" style=\"padding-left:20px;\"><div style=\"display:none;\" class=\"parent_id\">#{comment.id}</div>#{comment.user.name}:<br/><div class=\"ccontent\">#{comment.content}</div><br/><a href=\"#reply\" class=\"reply\" style=\"color:black;\">Reply</a>";
  children = comment.children
  children.each do |c|
    create_comments_list(c, commentlist)
  end
  commentlist += "</div><div class=\"shortdivider\">&nbsp;</div>"
  commentlist
end

我像这样在控制器中调用:

@commentlist = create_comments_list(c, @commentlist)

它似乎在进行完全递归......但是在 1 个父评论和 1 个子评论的情况下,评论列表只会吐出父评论。如果我记录一些东西,我可以看到孩子确实被附加到递归调用中的@commentlist,但是当它展开到父输入递归的位置时,commentlist 变量不再包含孩子。看来我不了解这些变量的范围......我需要commentlist 在它从内部递归调用中解开后保留它的值。任何人都可以阐明一些光?(或者一些更好的方法?我的坏风格铃在我脑海里响起)

4

1 回答 1

2

如果你想改变你的论点,请<<使用铲子运算符。+=commentslist

+=创建一个新的字符串对象并将其分配给您的变量,但堆栈中更靠前的函数仍然具有对旧字符串值的引用。 <<更改现有的字符串对象。

a = "foo"   # => "foo"
a.object_id # => 69847780
a += "bar"  # => "foobar"
a.object_id # => 69786550 (note this is not the same object as before)

b = "foo"   # => "foo"
b.object_id # => 69764530
b << "bar"  # => "foobar"
b.object_id # => 69764530
于 2011-09-21T06:57:21.907 回答