Question

J'utilise Rails Ransack ( https://github.com/ernie/ransack ) pour permettre aux utilisateurs de filtrer et de trier certains enregistrements. Je reçois les enregistrements filtrés et triés en utilisant des méthodes traditionnelles.

 @invoices = Invoice.search(params[:q]).result

Maintenant, je voudrais obtenir des informations de résumé, donc j'ai

 @invoices = Invoice.search(params[:q]).result
 @summary = @invoices.select("sum(balance) as balance_total").first

Sauf lorsque l'utilisateur spécifie un champ à trier. J'obtiens l'erreur 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

Puis-je supprimer le tri de la portée? Comment?

Merci

Était-ce utile?

La solution

Vous pouvez appeler le réorganiser Méthode avec une chaîne vide. Par exemple:

> 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` "

Autres conseils

Vous pouvez également utiliser le unscoped Méthode de classe dans 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

Dans Rails 2, on l'appelait with_exclusive_scope.

Voir https://github.com/rails/rails/commit/bd1666ad1de88598ed6f04ceffb8488a77be4385

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top