73

我正在使用 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

我可以从范围中删除排序吗?如何?

谢谢

4

2 回答 2

180

您可以使用空字符串调用重新排序方法。例如:

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`"
于 2012-02-28T23:34:15.450 回答
-4

您还可以使用unscopedRails 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

于 2012-03-25T19:01:07.140 回答