从ActiveRecord范围中删除订单

时间:2012-02-28 23:24:15

标签: ruby-on-rails activerecord ransack

我正在使用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 个答案:

答案 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