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

空の文字列を指定して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`"
于 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 に答える