2014-02-06 6 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, и он должен работать так, как ожидалось. –

Смежные вопросы