【问题标题】:Rails: Ordering from within a viewRails:从视图中订购
【发布时间】:2012-08-09 00:29:41
【问题描述】:

我正在使用acts_as_commentable_with_threading gem。此 gem 包含方法“comment.children”,它创建所有子 cmets 的哈希。默认情况下,它通过 created_at ASC 对子项进行排序。我想改变孩子的排序方式,但据我所知,我不能直接编辑这个方法。相反,我一直在尝试像这样在视图中重新排序它们:

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

不幸的是,这没有效果。知道我做错了什么吗?

【问题讨论】:

标签: ruby-on-rails acts-as-commentable


【解决方案1】:

您应该将sort 用于数组和散列。

<% @comments = comment.children.sort { |a,b| b.created_at <=> a.created_at } %>

参考:http://apidock.com/ruby/Enumerable/sort

【讨论】:

  • 您的解决方案确实有效,但我从几个来源中了解到,尽可能使用 .order 更为可取,因为 .order 由数据库处理,这样更快。我假设 .order 方法在这里不起作用,因为数组已经由数据库创建,所以我所能做的就是用 .sort 操作数组?
  • 我不是 Ruby 的那个巫师,所以其他人不妨在这里证明我错了,但似乎没有数组的 order 方法。 ruby-doc.org/core-1.9.3/Array.html
  • 我会再坚持一会儿,以防万一有人知道使用 .order 的方法。否则,这很有意义,明天早上我会接受你的回答。
  • .order 如果您正在编写活动记录调用,则可以使用。我不知道acts_as_commentable_with_threading 是如何工作的,但它可能会在为获取评论而进行的数据库查询中返回子项。你能告诉我们你的孩子收藏的班级吗?您可以通过将 添加到您的视图中来做到这一点。
  • 如果您不打算拥有大量子元素,我会坚持使用 .sort 而不是尝试修改 gem 方法 - 它会很快变得丑陋。否则,您可能需要检查其他宝石来帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
相关资源
最近更新 更多