【问题标题】:Sorting collection of different models排序不同模型的集合
【发布时间】:2013-11-09 05:03:40
【问题描述】:

我正在执行两个查询:

@doodads= Doodad.all
@whatsits = Whatsit.all

我将它们添加到一个集合中:

@collection = @doodads + @whatsits

我想按它们的“created_at 字段”对它们进行排序:

@collection.sort_by $:created_at

虽然它确实按 created_at 字段对它们进行排序,但项目类型并没有混合 - 每个 Doodad 排在第一位,然后是每个 Whatsit。我怎样才能让这个收集的东西正确排序?

【问题讨论】:

  • 你没有错字吗?应该是&:created_at
  • 我想我们需要一个复制品。
  • 你在那里使用什么样的数据库?
  • 你的意思是在排序后的集合中,对象先按类型排序,然后在类型内按created_at排序?
  • @SergioTulentsev 或者因为缺少@collection = ... 部分而根本没有排序?胡乱猜测。 @ArupRakshit 可能猜对了,但他的回答是错误的,因为它没有解释发生了什么。

标签: ruby-on-rails ruby


【解决方案1】:

请使用Array#sort_by!:

使用通过给定块映射 self 中的值生成的一组键对 self 进行就地排序。

@collection.sort_by! &:created_at

当您使用@collection.sort_by &:created_at 时,其中sort_by 方法适用于@collection 的副本,但排序后的方法不会再次存储回@collection(即@collection = @collection.sort_by &:created_at 也可以使用)。现在sort_by! 确实对接收器@collection 本身执行排序。

【讨论】:

  • 另外,它是如何回答这个问题的?
  • 我想是的。你的回答没有回答问题。
  • 当烟消云散时,我很乐意收回反对票。 :)
  • 这完美地回答了它。我的完全监督!这 '!'运算符对集合执行操作。在我的原始代码中,collection = collection.sort_by &:created_at 也可以。谢谢!
  • @TheSciz 这没有回答,你回答了。
猜你喜欢
  • 2017-06-03
  • 1970-01-01
  • 2011-04-29
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
相关资源
最近更新 更多