基本的に、私のクエリは、レコードの created_at がそれ自体の created_at より大きいと言っています。
irb(main):025:0> u = User.first
User Load (1.0ms) SELECT "users".* FROM "users" LIMIT 1
=> #<User id: 1, email: "my@email.com", encrypted_password: "stuff...", created_at:
"2012-02-01 18:56:45", updated_at: "2012-03-17 21:10:13">
irb(main):026:0> User.where("created_at > ?", u.created_at).include? u
User Load (1.0ms) SELECT "users".* FROM "users" WHERE (created_at > '2012-02-
01 18:56:45.740392')
=> true
表示されているクエリは、日時の書式設定の問題であることを明確にしています...クエリを作成すると、秒の端数が丸められます。クエリを変更して、created_at で予測どおりに/一貫して並べ替えることができますか?
ActiveRecordの精度について議論し、strftimeなどを提案する他の質問をいくつか調べましたが、確実に機能させることはできません。私は開発でSQLite(上記のコンソールの引用)と本番環境でPostgresを使用しています。
注: ここでのより広い目標は、ほとんど/すべてのリソースに#next
およびを追加#previous methods
して、管理メニューでより簡単に繰り返し処理できるようにすることです。信頼できるデフォルトの順序を達成する別の方法があれば、私はそれを受け入れます。
のようなタイムスタンプ以外の引数を渡すと、以下のコードのように両方のメソッドが適切に機能します:name
が、#next
引数を渡さない場合は同じオブジェクトを返します (デフォルトは:created_at
) 。
def previous(column = :created_at)
self.class.first(:conditions => ["#{column} < ?", self.send(column)], :order => "#{column} desc")
end
def next(column = :created_at)
self.class.first(:conditions => ["#{column} > ?", self.send(column)], :order => "#{column} asc")
end