2009-12-01 3 views
1

J'ai un projet qui doit utiliser une fonction agregrate pour trier et retourner les enregistrements pertinents d'un de mes modèles d'enregistrements actifs. Le problème est, en dépit de le voir utilisé sur de nombreux tutoriels de rails, et bien qu'il soit dans la documentation en ligne ActiveRecord, mon application Rails jette cette erreur à moi lorsque la méthode est appelée:'Clé (s) inconnue (s):' Dans Ruby on Rails ActiveRecord Trouver la méthode

Unknown key(s): having 

Toutes les idées pourquoi?

J'utilise comme ça (j'ai un :group => avant d'qui fonctionne, comme sans:. Ayant le code exécute correctement, il est tout simplement pas filtré - dont j'ai besoin):

Question.find(
    :all, 
    :select => "questions.id, questions.text, questions.question_type_id, questions.meta, questions.max_answer_length, CAST(COUNT(form_questions.id) AS REAL)/CAST((SELECT COUNT(*) FROM application_forms) AS REAL) AS expr1", 
    :joins => "INNER JOIN form_questions ON questions.id = form_questions.question_id", 
    :order => "expr1 DESC", 
    :group => "questions.id, questions.text, questions.question_type_id, questions.meta, questions.max_answer_length", 
    :having => ["expr1 >= ?", 0.75] 
) 
+1

Pouvez-vous envoyer le code réel? Des choses comme celle-ci se révèlent habituellement à des fautes de frappe ou à quelque autre chose simple qui vous fait gifler votre front, selon mon expérience. Bien sûr, maintenant que je l'ai dit, quelqu'un répondra avec une réponse profondément technique qui fait référence à plusieurs billets de phare différents et à une solution de contournement. Ensuite, je vais gifler mon front. – Baldu

+0

modifié avec le code complet. – Ash

+1

Quelle version de Rails utilisez-vous? L'option: ayant été ajoutée en 2.3. – Baldu

Répondre

4

Est-ce êtes-vous sûr que votre version de RoR est à jour? ActiveRecord fournit un support pour: avoir (je pense) 2 ans maintenant, mais vous utilisez probablement une version obsolète?

Si vous ne pouvez pas mettre à jour votre environnement rails, vous pouvez toujours utiliser la clause HAVING en l'ajoutant à la fin de votre instruction: group.

Meilleur souhaité, Fabian

+0

Parfait, spot on! – Ash

+0

Bien que j'utilise la v 2.2.2 - mais ça ne fait rien - ça marche maintenant et c'est tout ce qui m'importe. – Ash

Questions connexes