2014-02-06 133 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的調用,它應該按預期工作。 –

相關問題