我正在使用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
我可以从范围中删除排序吗?怎么样?
由于
答案 0 :(得分:143)
您可以使用空字符串调用reorder方法。 E.g:
> 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` "
答案 1 :(得分:-3)
您还可以在Rails 3中使用unscoped
类方法:
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