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