Ruby on Rails: obteniendo el valor máximo de una columna DB

125

Actualmente puedo hacer la consulta SQL directa en mi base de datos:

SELECT MAX(bar) FROM table_name

Y vuelve con el valor máximo en esa tabla. Sin embargo, cuando hago lo que considero una llamada equivalente en Rails, no funciona. Estoy llamando:

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

Esto simplemente regresa con:

[#<Bar >]

En la columna a la que llamo hay una serie de números de identificación, estoy buscando el más grande. ¿Hay alguna otra forma de acceder a esto en Rails?

con llave
fuente

Respuestas:

272

Suponiendo que el nombre de su modelo es Bary tiene una columna llamada bar, esto debería funcionar:

Bar.maximum("bar")

Consulte la excelente sección Guías de rieles en Cálculos para obtener más información.

Dylan Markow
fuente
Ah ja! Tienes razón, eso lo hizo. Marcaré tu respuesta como la que pronto SO me permita. ¡Gracias!
keybored
6

una forma más

Bar.select("Max(bar) as max_bar").first.max_bar
Manish Kasera
fuente
55
Por qué querrías hacer esto? Más prolija, y ejecuta exactamente la misma consulta que Bar.maximum(:bar)así que no veo ninguna razón para "recomendar" esta respuesta en absoluto ...
nathanvda
19
por ejemplo, si quieres min y max:Bar.select("MAX(bar) max_bar, MIN(bar) min_bat").first.attributes
Shalev Shalit
La persona que hace la pregunta solo quería max.
Chris Peters
1
Él proporcionó una respuesta correcta para la pregunta. Probablemente no sea la mejor respuesta, pero no hizo nada malo.
david0116