2012-06-15 33 views
7

Trong khi cố gắng để tìm kiếm với id sắp xếp (và paginating) im nhận được từ nhật ký (và phiên bản?):Ruby on Rails trật tự bởi id

SELECT `audits`.* FROM `audits` ORDER BY version, id DESC LIMIT 50 OFFSET 0 

Tôi hiện đang sử dụng mã này:

@records = Audit.order("id DESC").page(page).per(50) 

Sự cố là danh sách được truy xuất không được sắp xếp chính xác theo id giảm dần.

BTW tôi đang sử dụng đá quý kiểm toán-activerecord để kiểm tra, điều này có quan trọng không?

+1

Dường như viên ngọc này trong nội bộ viết một trật tự default_scope bởi phiên bản trong mô hình của bạn. Hãy thử tìm kiếm trong tài liệu gem nếu bạn có thể vô hiệu hóa default_scope này cho một số mô hình. – MurifoX

Trả lời

12

Tôi đoán rằng đá quý của bạn là thiết lập một phạm vi mặc định trên các mô hình kiểm toán mà đơn đặt hàng của phiên bản, vì vậy tại thời điểm nó được sắp xếp theo thứ tự tăng dần bởi cột phiên bản, và, chỉ khi hai bản ghi là như nhau, là nó sắp xếp theo id theo thứ tự giảm dần.

Để sửa lỗi này, bạn có thể thêm vào trước unscoped đến chuỗi của bạn:

Audit.unscoped.order("id DESC").page(page).per(50) 
7

thử:

@records = Audit.except('order').order("id DESC").page(page).per(50) 

các except('order') nên loại bỏ bất kỳ mối quan hệ để thêm vào truy vấn

+1

Thú vị, không bao giờ biết về 'ngoại trừ' trước đây. –