сортировать записи по двум полям в ruby ​​на рельсах - PullRequest
0 голосов
/ 02 июля 2011

Возникла проблема (или мое недоразумение) с сортировкой записей. В моем приложении набор данных загружается скриптом, набор данных содержит несколько записей, и все они имеют одинаковое поле created_at. После этого записи редактируются / обновляются вручную, поэтому updated_at отличаются. Я бы хотел видеть самую последнюю необновленную запись сверху, в основном мне нужно отсортировать записи по двум полям, сначала по created_at в обратном порядке (старый набор данных идет вниз), затем по updated_at ( уже отредактированные записи идут после не обновленных). Модель выглядит так:

class Part < ActiveRecord::Base
  default_scope :order => "created_at DESC, updated_at"
end

После загрузки двух наборов данных я пытаюсь получить записи в консоли, вывод выглядит так:

$ bundle exec rails console
Loading development environment (Rails 3.0.5)
>> Part.all.each {|p| puts p.created_at}
2011-07-01 19:52:00 UTC
2011-07-01 19:52:00 UTC
2011-07-01 19:26:44 UTC
2011-07-01 19:26:44 UTC
>> Part.all.each {|p| puts p.updated_at}
2011-07-01 19:52:09 UTC
2011-07-01 19:52:00 UTC
2011-07-01 19:27:15 UTC
2011-07-01 19:33:01 UTC

Видимо, сортировка работает не так, как ожидалось, ожидаемый (желательный) результат:

>> Part.all.each {|p| puts p.updated_at}
2011-07-01 19:52:00 UTC
2011-07-01 19:52:09 UTC
2011-07-01 19:27:15 UTC
2011-07-01 19:33:01 UTC

Я также пытался удалить default_scope из модели и запустить следующие операции в консоли, но это не помогло:

Part.group("created_at").order("updated_at").each {|p| puts p.updated_at}
Part.order("created_at DESC, updated_at").each {|p| puts p.updated_at}

Кто-нибудь может объяснить, как добиться желаемого порядка?

UPD: похоже, что второй вариант упорядочения не учитывается просто потому, что отметка времени хранится с большей точностью, чем секунды, т.е. created_at - это не 2011-07-01 19:52:00 UTC, а 2011-07-01 19:52:00.12345 UTC. следовательно, все записи имеют уникальную отметку времени created_at, поэтому группировка по этому полю невозможна. я прав?

Ответы [ 2 ]

1 голос
/ 03 июля 2011

решение найдено: вместо сортировки по двум полям я в итоге установил updated_at в ноль, как предложено в Ruby on Rails: updated_at - установить на 0 при создании и сортировать только по updated_at поле. это выводит все необновленные записи сверху.

0 голосов
/ 02 июля 2011

Следует ли сортировать updated_at по убыванию? Попробуйте заказать с created_at DESC, updated_at DESC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...