Возникла проблема (или мое недоразумение) с сортировкой записей. В моем приложении набор данных загружается скриптом, набор данных содержит несколько записей, и все они имеют одинаковое поле 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
, поэтому группировка по этому полю невозможна. я прав?