レコードのソートに問題がある(または私の誤解があります)。私のアプリケーションでは、データセットはスクリプトによってロードされ、データセットにはいくつかのレコードが含まれ、それらのすべてに同じcreated_at
フィールドがあります。その後、レコードは手動で編集/更新されるため、updated_at
は異なります。私は上に最新の更新されていないレコードを見たいと思う、基本的には、created_at
で逆のoder(古いデータは下に行く)、次にupdated_at
でレコードを2つのフィールドでソートする必要がある更新されていない)。モデルは次のようになります。二組のデータをロードした後ruby on railの2つのフィールドでレコードをソート
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
Iは、モデルからdefault_scope
を除去し、そしてfollowiを実行しようとしましたNGはコンソールで動作しますが、それは助けていませんでした:
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
タイムスタンプがあるため、このフィールドでグループ化することはできません。私は正しい?
残念ながら、動作しません。私はモデル 'default_scope:order =>" created_at DESC、updated_at DESC "'とコンソール 'Part.order(" created_at DESC、updated_at DESC ")で設定しようとしました。 puts p.updated_at} '、どちらも希望の順序を与えません... – zeliboba