0

所以我试图组合4个不同项目的数组,然后按“created_at”列对这些数组进行排序,就像最新的一样。因此,结果数组应该是所有这些项目的数组,这样无论它们是什么类型,最新的项目都是第一个。我可以对它进行排序,以便最新的项目,但它对每种类型的项目进行排序,然后开始对另一种类型进行排序。

示例:类型是衬衫和裤子。我在晚上 10:00 上传一件衬衫,然后在晚上 10:15 上传一件裤子,然后在晚上 10:30 再上传一件衬衫。数组应该像 (shirt(10:30), pant(10:15), shirt(10:00)) 但我得到的是 (shirt(10:00), shirt(10:30), pant(10 :15))

这是我的代码:

@tops = Top.first(15)
@bottoms = Bottom.first(15)
@footwears = Footwear.first(15)
@accs = Accessory.first(15)

@tempItems = []
@temp = []
@temp = @tempItems + @tops 
@temp = @temp + @bottoms 
@temp = @temp + @footwears 
@temp = @temp + @accs

@temp.sort_by{ |temp| - temp.created_at.to_i}
@itemss = @temp.first(15)
4

2 回答 2

2

您需要将排序后的数组分配回@temp

...

@temp =  @temp.sort_by{ |temp| - temp.created_at.to_i}
于 2013-09-27T11:35:22.690 回答
0

您可以通过删除不必要的分配代码来减少混淆:

fifteen= [Top, Bottom, FootWear, Accessory].
  flat_map{ |c| c.first(15) }.
  sort_by{ |e| -e.created_at.to_i }.
  first(15)
于 2013-09-27T11:49:42.233 回答