Удалить заказ из области ActiveRecord

Я использую rails ransack (https://github.com/ernie/ransack), чтобы пользователи могли фильтровать и сортировать некоторые записи. Я получаю отфильтрованные и отсортированные записи, используя традиционные методы.

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

Теперь я хотел бы получить некоторую сводную информацию, чтобы у меня

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

За исключением случаев, когда пользователь указывает поле для сортировки. Я получаю ошибку 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

Можно ли удалить сортировку из области? Как?

Спасибо

Ответ 1

Вы можете вызвать метод reorder с пустой строкой. Например:.

[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` "

Ответ 2

Вы также можете использовать метод класса unscoped в 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

В Rails 2 он назывался with_exclusive_scope.

См. https://github.com/rails/rails/commit/bd1666ad1de88598ed6f04ceffb8488a77be4385