Tôi có một kiểu gọi là Story
mà tôi đang cố gắng đặt hàng trước ngày created_at
. Kể từ khi tôi đã tổ chức ứng dụng của tôi trên Heroku, trong đó sử dụng PostgreSQL, tôi đã điều sau đây trong điều khiển của tôi:Đường ray: đặt hàng theo ngày trong Postgres trả lại thứ tự không chính xác
@stories = Story.find(:all, :order => "DATE(created_at) DESC" , :limit => 11)
tôi sẽ mong đợi điều này để cung cấp cho 11 đầu tiên của câu chuyện của tôi, sắp xếp theo ngày tạo, với câu chuyện mới nhất đầu tiên.
Rất tiếc, tính năng này không hoạt động. Hầu hết các câu chuyện được trả lại một cách chính xác, nhưng hai câu chuyện đầu tiên bị lật. Đó là, câu chuyện mới nhất xuất hiện thứ hai trong danh sách.
Tại sao điều này là? Tôi có một nghi ngờ lén lút rằng kết quả của tôi không được đặt hàng ở tất cả hoặc đang được đặt hàng trên cột sai (có thể id?) Và cho đến bây giờ nó chỉ xảy ra được lệnh như tôi mong đợi khi hiển thị trên trang chỉ mục của tôi. Làm thế nào tôi có thể làm cho nó để đặt hàng như tôi mong đợi nó?
Trong trường hợp bất kỳ ai quan tâm, chế độ xem chỉ mục chỉ hiển thị các câu chuyện theo thứ tự. Đó là (HAML):
- @stories.each do |story|
= render :partial => "event", :locals => { :event => story }
EDIT
Tôi nghi ngờ rằng created_at
là một cột datetime và DATE(...)
chức năng không quan tâm đến phần thời gian. Vì vậy, nó trả về các phần tử được tạo trong cùng một ngày theo một thứ tự ngẫu nhiên. Kể từ khi hai câu chuyện đầu tiên được tạo ra trong cùng một ngày, nhưng cách nhau vài giờ, điều này sẽ giải thích tại sao chúng dường như bị 'đảo ngược'. Nếu đây là trường hợp, cú pháp chính xác sẽ được sắp xếp theo cả ngày giờ?
Điều đó đã xảy ra. Cảm ơn. –