Удалить заказ из области ActiveRecord - PullRequest
59 голосов
/ 29 февраля 2012

Я использую 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

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

Спасибо

Ответы [ 2 ]

144 голосов
/ 29 февраля 2012

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

> Article.order('headline asc').to_sql
=> "SELECT `articles`.* FROM `articles`  ORDER BY headline asc"
> Article.order('headline asc').reorder('').to_sql
=> "SELECT `articles`.* FROM `articles` "
0 голосов
/ 25 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...