Ruby on Rails: obtenir la valeur maximale d'une colonne DB


125

Actuellement, je peux effectuer la requête SQL directe sur ma base de données:

SELECT MAX(bar) FROM table_name

Et il retourne avec la valeur maximale de cette table. Quand je fais ce que je considère comme un appel équivalent dans Rails, cependant, cela ne fonctionne pas. J'appelle:

Bar.all(:select => "Max(bar)")

Cela revient simplement avec:

[#<Bar >]

Dans la colonne que j'appelle, il y a une série de numéros d'identification, je cherche le plus grand. Y a-t-il un autre moyen d'y accéder dans Rails?

Réponses:


272

En supposant que le nom de votre modèle est Baret qu'il a une colonne nommée bar, cela devrait fonctionner:

Bar.maximum("bar")

Voir l'excellente section des guides de rails sur les calculs pour plus d'informations.


Ah ha! Vous avez raison, cela l'a fait. Je vérifierai votre réponse comme étant celle dès que SO me le permettra. Merci!
percé le

6

encore une façon

Bar.select("Max(bar) as max_bar").first.max_bar

5
Pourquoi voudriez-vous faire cela? Plus verbeux, et exécute exactement la même requête, Bar.maximum(:bar)donc je ne vois aucune raison de "recommander" cette réponse du tout ...
nathanvda

19
par exemple, si vous voulez à la fois min et max:Bar.select("MAX(bar) max_bar, MIN(bar) min_bat").first.attributes
Shalev Shalit

La personne qui pose la question ne voulait que max.
Chris Peters

1
Il a fourni une réponse correcte à la question. Ce n'est probablement pas la meilleure réponse, mais il n'a rien fait de mal.
david0116
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.