对记录进行排序存在问题(或我的误解)。在我的应用程序中,数据集由脚本加载,数据集包含多个记录,并且所有记录都具有相同的created_at
字段。之后,手动编辑/更新记录,因此updated_at
不同。我想在最上面看到最近未更新的记录,基本上我需要按两个字段对记录进行排序,首先是created_at
反向oder(旧数据集转到底部),然后是{{ 1}}(已编辑的记录在未更新之后)。该模型看起来像:
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
有人可以解释如何达到预期的顺序吗?
UPD:似乎没有考虑第二个排序选项只是因为时间戳的存储精度高于秒,即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}
不是created_at
,而是{{1} }。因此,所有记录都具有唯一的2011-07-01 19:52:00 UTC
时间戳,因此无法按此字段进行分组。我是对的吗?
答案 0 :(得分:1)
找到解决方案:我不是按两个字段排序,而是按照Ruby on Rails: updated_at - set as 0 on creation中的建议将updated_at
设置为零,并仅按updated_at
字段排序。这将输出所有未更新的记录。
答案 1 :(得分:0)
update_at也应该按降序排序吗?尝试使用created_at DESC, updated_at DESC
订购。