Supprimer afin de ActiveRecord portée
Je suis à l'aide de rails de fouille ( https://github.com/ernie/ransack ) pour autoriser les utilisateurs à filtrer et trier des enregistrements. Je reçois le filtrés et triés enregistrements à l'aide de méthodes traditionnelles.
@invoices = Invoice.search(params[:q]).result
Maintenant, j'aimerais 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 de tri. 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?
Grâce
- hmmm maintenant de fouiller n'est pas aimer le sélectionner sur le jeu de résultats, pas sur que cela a fonctionné sans les trier problème de plus.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez appeler la réorganiser méthode avec une chaîne vide. E. g.:
.reorder(nil)
.unscope(:order)
.except(:order)
.Vous pouvez également utiliser le
unscoped
méthode de classe dans Rails 3:Dans les Rails 2, il a été appelé
with_exclusive_scope
.Voir https://github.com/rails/rails/commit/bd1666ad1de88598ed6f04ceffb8488a77be4385
unscoped
: Il ne se contente pas de rétablir l'ordre! Si vous l'utilisez dans un enchaînés ActiveRecord requête, il élimine efficacement la avant les contraintes de l'examen. Par exemple,Posts.first.comments.unscoped
sera de retour TOUS les Commentaires, et non pas seulement ceux qui sont associés avec le premier Post.