基本上,我的查詢是說,一個記錄的created_at大於它自己的created_at。如何比較created_at可靠的Rails Activerecords
irb(main):025:0> u = User.first
User Load (1.0ms) SELECT "users".* FROM "users" LIMIT 1
=> #<User id: 1, email: "[email protected]", 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
以下,但如果我沒有傳遞參數(默認爲: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
它還剛剛發生,我認爲這實現不會做的非常好,如果你在這裏多條記錄有相同的值的屬性進行排序。如編碼一樣,它會隨意選擇一個具有該值的記錄,然後在迭代它們時跳過其他記錄。 – LikeMaBell