Tôi dường như không thể sử dụng tùy chọn ActiveRecord :: Base.find: đặt hàng cho nhiều cột cùng một lúc.
Ví dụ: tôi có mô hình "Hiển thị" với các cột ngày và ngày tham dự.
Nếu tôi chạy mã sau:
@shows = Show.find(:all, :order => "date")
Tôi nhận được các kết quả sau:
[#<Show id: 7, date: "2009-04-18", attending: 2>,
#<Show id: 1, date: "2009-04-18", attending: 78>,
#<Show id: 2, date: "2009-04-19", attending: 91>,
#<Show id: 3, date: "2009-04-20", attending: 16>,
#<Show id: 4, date: "2009-04-21", attending: 136>]
Nếu tôi chạy mã sau:
@shows = Show.find(:all, :order => "attending DESC")
[#<Show id: 4, date: "2009-04-21", attending: 136>,
#<Show id: 2, date: "2009-04-19", attending: 91>,
#<Show id: 1, date: "2009-04-18", attending: 78>,
#<Show id: 3, date: "2009-04-20", attending: 16>,
#<Show id: 7, date: "2009-04-18", attending: 2>]
Nhưng, nếu tôi chạy:
@shows = Show.find(:all, :order => "date, attending DESC")
HOẶC LÀ
@shows = Show.find(:all, :order => "date, attending ASC")
HOẶC LÀ
@shows = Show.find(:all, :order => "date ASC, attending DESC")
Tôi nhận được kết quả giống như chỉ sắp xếp theo ngày:
[#<Show id: 7, date: "2009-04-18", attending: 2>,
#<Show id: 1, date: "2009-04-18", attending: 78>,
#<Show id: 2, date: "2009-04-19", attending: 91>,
#<Show id: 3, date: "2009-04-20", attending: 16>,
#<Show id: 4, date: "2009-04-21", attending: 136>]
Tôi muốn nhận được những kết quả sau:
[#<Show id: 1, date: "2009-04-18", attending: 78>,
#<Show id: 7, date: "2009-04-18", attending: 2>,
#<Show id: 2, date: "2009-04-19", attending: 91>,
#<Show id: 3, date: "2009-04-20", attending: 16>,
#<Show id: 4, date: "2009-04-21", attending: 136>]
Đây là truy vấn được tạo từ nhật ký:
[4;35;1mUser Load (0.6ms)[0m [0mSELECT * FROM "users" WHERE ("users"."id" = 1) LIMIT 1[0m
[4;36;1mShow Load (3.0ms)[0m [0;1mSELECT * FROM "shows" ORDER BY date ASC, attending DESC[0m
[4;35;1mUser Load (0.6ms)[0m [0mSELECT * FROM "users" WHERE ("users"."id" = 1) [0m
Cuối cùng, đây là mô hình của tôi:
create_table "shows", :force => true do |t|
t.string "headliner"
t.string "openers"
t.string "venue"
t.date "date"
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
t.decimal "price"
t.time "showtime"
t.integer "attending", :default => 0
t.string "time"
end
Tôi đang thiếu gì? Tôi đang làm gì sai?
CẬP NHẬT: Cảm ơn sự giúp đỡ của tất cả các bạn, nhưng có vẻ như tất cả các bạn đều gặp khó khăn như tôi. Những gì đã giải quyết vấn đề thực sự là chuyển đổi cơ sở dữ liệu. Tôi đã chuyển từ sqlite3 mặc định sang mysql.