Rails: 在视图中实现排序

4

我正在使用acts_as_commentable_with_threading宝石。该宝石包括“comment.children”方法,可以创建所有子评论的哈希表。默认情况下,它按created_at ASC对子项进行排序。我想改变子项的排序方式,但据我所知,我不能直接编辑此方法。相反,我一直在尝试在视图中重新排序,如下所示:

<% @comments = comment.children.order('created_at DESC') %>

很遗憾,这没有任何效果。你有什么想法我做错了什么吗?

这个宝石库的最后一次提交是2年前,所以看起来它已经不再维护了。 - denis.peplin
也许我理解有误,但是看起来最后一次提交是在三个月前 - nullnullnull
是的,这个版本足够新鲜。Google经常寻找旧事物,对我来说它找到了这个:https://github.com/ChristianPeters/acts_as_commentable_with_threading。同样的gem名称。 - denis.peplin
1个回答

7

你的解决方案肯定是有效的,但我从几个来源中读到,尽可能使用.order更可取,因为.order由数据库处理,速度更快。我猜测在这里无法使用.order方法,因为数组已经被数据库创建,所以我只能用.sort来操作数组? - nullnullnull
我对Ruby并不是很熟悉,所以也许有人可以证明我是错误的,但似乎数组没有order方法。http://www.ruby-doc.org/core-1.9.3/Array.html - Marcelo De Polli
我会再坚持一会儿,以防有人知道如何使用 .order。否则,这很有道理,明天早上我会接受你的答案。 - nullnullnull
2
如果您正在组合一个Active Record调用,那么.order将起作用。我不知道acts_as_commentable_with_threading是如何工作的,但它可能会在获取评论的数据库查询中返回子项。您能展示一下您的子项集合类吗?您可以通过在视图中添加<%= comment.children.class %>来实现。 - caffo
是的,这个类是Array。也许在这里最好的做法是手动将gem的控制器插入到我的应用程序中,然后进行编辑? - nullnullnull
1
如果你不打算拥有非常多的子元素,我建议你使用 .sort 而不是尝试修改 gem 方法 - 这可能会变得非常混乱。否则,你可能需要查找其他 gem 来帮助你。 - caffo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接