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?

keybored
la source

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.

Dylan Markow
la source
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
Manish Kasera
la source
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