Подтвердить что ты не робот

Удалить заказ из области 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

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

Спасибо

4b9b3361

Ответ 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