2012-02-28 2 views
53

Tôi đang sử dụng đường ray để ransack (https://github.com/ernie/ransack) để cho phép người dùng lọc và sắp xếp một số bản ghi. Tôi nhận được các hồ sơ được lọc và sắp xếp bằng các phương pháp truyền thống.Xóa đơn đặt hàng khỏi phạm vi ActiveRecord

@invoices = Invoice.search(params[:q]).result 

Bây giờ tôi muốn nhận được một số thông tin tóm tắt vì vậy tôi có

@invoices = Invoice.search(params[:q]).result 
@summary = @invoices.select("sum(balance) as balance_total").first 

Trừ khi người dùng chỉ định một trường để sắp xếp. Tôi gặp lỗi SQL:

Column "project_name" is invalid in the ORDER BY clause because 
it is not contained in either an aggregate function or the GROUP BY clause 

Tôi có thể xóa sắp xếp khỏi phạm vi không? Làm sao?

Cảm ơn

+0

hmmm tại lục soát không thích các lựa chọn trên các tập kết quả, không chắc chắn nó làm việc mà không có vấn đề loại nữa. – jrhicks

Trả lời

125

Bạn có thể gọi phương thức reorder bằng một chuỗi rỗng. Ví dụ .:

[1] pry(main)> Article.order('headline asc').to_sql 
=> "SELECT `articles`.* FROM `articles` ORDER BY headline asc" 
[2] pry(main)> Article.order('headline asc').reorder('').to_sql 
=> "SELECT `articles`.* FROM `articles` " 
+8

Lưu ý: Nếu nó cảm thấy tốt hơn cho bạn, cũng có thể gọi '.reorder (nil)'. – pdobb

+5

Một tùy chọn khác là sử dụng 'unscope (: order)' – Rene

-3

Bạn cũng có thể sử dụng phương pháp lớp unscoped trong Rails 3:

class Post < ActiveRecord::Base 
    default_scope :published => true 
end 

posts = Post.all #=> SELECT * FROM posts WHERE published = true 

posts = Post.unscoped do 
    Post.all #=> SELECT * FROM posts 
end 

Trong Rails 2 nó được gọi là with_exclusive_scope.

Xem https://github.com/rails/rails/commit/bd1666ad1de88598ed6f04ceffb8488a77be4385

+23

Một lời cảnh báo cho những người sử dụng 'unscoped': Nó không chỉ là đặt lại thứ tự! Nếu bạn đang sử dụng nó trong một truy vấn ActiveRecord bị xích, nó sẽ loại bỏ các ràng buộc trước đó một cách hiệu quả. Ví dụ: 'Posts.first.comments.unscoped' sẽ trả về TẤT CẢ nhận xét, chứ không phải chỉ những liên kết với Bài đăng đầu tiên. –