通过轨道上的ruby中的两个字段对记录进行排序

时间:2011-07-01 22:50:54

标签: ruby-on-rails-3 sorting

对记录进行排序存在问题(或我的误解)。在我的应用程序中,数据集由脚本加载,数据集包含多个记录,并且所有记录都具有相同的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时间戳,因此无法按此字段进行分组。我是对的吗?

2 个答案:

答案 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订购。