2010-08-31 8 views
0

Dans Rails 2.3.8, il existe une méthode de classe ActiveRecord::Base.count_by_sql qui permet d'effectuer des personnalisations SELECT count(*) .... Est-il possible d'exécuter une requête personnalisée SELECT sum(...) ... avec cette méthode? Si non, que faut-il faire pour exécuter une telle requête? Est-ce que ActiveRecord::Base.connection.execute est la seule option?Quelle est la meilleure façon d'exécuter `sum_by_sql`?

Merci.

EDIT: La requête que je veux exécuter a une autre requête imbriquée. C'est pourquoi je crois que les méthodes de ActiveRecord::Calculations ne sont pas suffisantes.

Répondre

0

select_value de ActiveRecord::ConnectionAdapters::DatabaseStatements module est la réponse. Il renvoie la valeur présente dans la première colonne de la première ligne renvoyée par la requête. select_value renvoie String, donc la conversion peut être nécessaire.

Exemple:

ActiveRecord::Base.connection.select_value("Some complicated sql") 
0

Vérifiez ActiveRecord::Calculations. Les documents API sont here.

Vous pouvez faire quelque chose comme ceci (en supposant que vous avez le modèle User):

User.maximum(:updated_at) 
# Generates: 
# SELECT max(`users`.updated_at) AS max_updated_at FROM `users` 
+0

Merci pour la réponse, mais il ne suffit pas dans mon cas. Je n'ai pas mentionné cela assez clair avant, mais j'ai besoin de passer du SQL brut (du moins je le pense). Ma requête a une autre requête imbriquée, elle ressemble à ceci: 'SELECT MAX (...) FROM (ici va une requête imbriquée dont je ne peux pas me débarrasser)'. C'est pourquoi j'ai besoin d'une méthode comme 'count_by_sql'. – skalee

Questions connexes