ActiveRecord Compter pour compter les lignes renvoyées par le groupe par dans les Rails

Je regardai autour de moi et ne pouvais pas trouver toutes les réponses à cela. Toutes les réponses impliqués chefs d'accusation qui n'a pas utiliser un GROUP BY.

De fond:
J'ai un paginator qui va prendre des options pour un ActiveRecord.trouver. Il ajoute :limite et :option de décalage et effectue la requête. Ce que j'ai aussi besoin de faire est de compter le nombre total d'enregistrements (moins de la limite), mais parfois, la requête contient :option de groupe et ActiveRecord.le comte tente de retourner toutes les lignes retournées par le GROUPE par le long avec chacun de leurs comptes. Je fais cela dans les Rails 2.3.5.

Ce que je veux, c'est pour ActiveRecord.le comte de retourner le nombre de lignes retournées par le GROUPE par.

Voici un exemple de code qui illustre un exemple de ce (utilisé pour trouver toutes les balises et les commander par le nombre de postes avec cette balise):

options = { :select => 'tags.*, COUNT(*) AS post_count',
            :joins => 'INNER JOIN posts_tags',   #Join table for 'posts' and 'tags'
            :group => 'tags.id',
            :order => 'post_count DESC' }

@count = Tag.count(options)

options = options.merge { :offset => (page - 1) * per_page, :limit => per_page }

@items = Tag.find(options)

Avec l' :sélection de l'option, la Balise.le comte génère le code SQL suivant:

SELECT count(tags.*, COUNT(*) AS post_count) AS count_tags_all_count_all_as_post_count, tags.id AS tags_id FROM `tags`  INNER JOIN posts_tags  GROUP BY tags.id  ORDER BY COUNT(*) DESC

Comme vous pouvez le voir il simplement enveloppé d'un COUNT() autour des " balises.*, COUNT (*)", et MySQL se plaint du COMTE au sein d'un COMTE.

Sans l' :sélection de l'option, il génère cette SQL:

SELECT count(*) AS count_all, tags.id AS tags_id FROM `tags` INNER JOIN posts_tags GROUP BY tags.id ORDER BY COUNT(*)

qui renvoie l'ensemble du GROUPE PAR le jeu de résultats et non pas le nombre de lignes.

Est-il un moyen de contourner ce ou vais-je avoir à pirater le paginator de compte pour les requêtes avec le GROUPE BYs (et comment pourrais-je aller sur le faire)?

InformationsquelleAutor J.Melo | 2011-02-22