2014-02-06 134 views
1

我有散列以下阵列:如何根据日期对类对象进行排序?

@products = {#<ProductProxy:0xb486d148 @pA={"productAvailableDateTs"=>"2013-12-04T23:07:12.592Z", "mPrice"=>, "pStock"=>, "id"=>, "productId"=>, "productDesignerId"=>}>, 
#<ProductProxy:0xb4adf304 @pA={"productAvailableDateTs"=>"2013-1-04T23:07:12.592Z", "mPrice"=>, "pStock"=>, "id"=>, "productId"=>, "productDesignerId"=>}>, 
#<ProductProxy:0xb4adecec @pA={"productAvailableDateTs"=>"2013-15-03T23:07:12.592Z", "mPrice"=>, "pStock"=>, "id"=>, "productId"=>, "productDesignerId"=>}>, 

... 
} 

我想根据productAvailableDateTs值数组排序,按降序排列。我试图做以下几点:

@products = @products.sort_by{ |k| -k['productAvailableDateTs'] } 

但这样做,我不能够访问productAvailableDateTs领域。我试图打印@products[0]['productAvailableDateTs']。但它打印nil。我如何正确访问该字段?

+4

这不是一个数组,它不包含散列。 –

+0

@SergioTulentsev:对不起,我错过了','。它确实是一个数组。我将它定义为@products = Array.new – nish

回答

1

如果你不需要将数据发送到数据库进行排序(假定你有从活动记录的数据),你可以把它转换成一个数组,然后对它进行排序:

@products.to_a.sort{ |a,b| b.productAvailableDateTs <=> a.productAvailableDateTs } 

如果它已经是一个阵列:

@products.sort{ |a,b| b.productAvailableDateTs <=> a.productAvailableDateTs } 

编辑:错过了订单。该命令通过更改第一个和第二个参数来实现。

+0

我从'solr'获得了数据。我使用相同的数组在视图中列出产品。所以我想保留目前的格式。 – nish

+0

当它已经是一个真正的数组时,可以跳过对to_a的调用,它应该按预期工作。 –

相关问题