Parece que no puedo usar la opción ActiveRecord :: Base.find: ordene para más de una columna a la vez.Rails Active Record find (: all,: order =>) issue
Por ejemplo, tengo un modelo "Mostrar" con fecha y columnas de asistencia.
Si funciono el siguiente código:
@shows = Show.find(:all, :order => "date")
puedo obtener los siguientes resultados:
[#<Show id: 7, date: "2009-04-18", attending: 2>,
#<Show id: 1, date: "2009-04-18", attending: 78>,
#<Show id: 2, date: "2009-04-19", attending: 91>,
#<Show id: 3, date: "2009-04-20", attending: 16>,
#<Show id: 4, date: "2009-04-21", attending: 136>]
Si funciono el siguiente código:
@shows = Show.find(:all, :order => "attending DESC")
[#<Show id: 4, date: "2009-04-21", attending: 136>,
#<Show id: 2, date: "2009-04-19", attending: 91>,
#<Show id: 1, date: "2009-04-18", attending: 78>,
#<Show id: 3, date: "2009-04-20", attending: 16>,
#<Show id: 7, date: "2009-04-18", attending: 2>]
Pero, si me quedo :
@shows = Show.find(:all, :order => "date, attending DESC")
O
@shows = Show.find(:all, :order => "date, attending ASC")
O
@shows = Show.find(:all, :order => "date ASC, attending DESC")
consigo los mismos resultados que sólo se puede clasificar por fecha:
[#<Show id: 7, date: "2009-04-18", attending: 2>,
#<Show id: 1, date: "2009-04-18", attending: 78>,
#<Show id: 2, date: "2009-04-19", attending: 91>,
#<Show id: 3, date: "2009-04-20", attending: 16>,
#<Show id: 4, date: "2009-04-21", attending: 136>]
Donde como, quiero conseguir estos resultados:
[#<Show id: 1, date: "2009-04-18", attending: 78>,
#<Show id: 7, date: "2009-04-18", attending: 2>,
#<Show id: 2, date: "2009-04-19", attending: 91>,
#<Show id: 3, date: "2009-04-20", attending: 16>,
#<Show id: 4, date: "2009-04-21", attending: 136>]
es la consulta que se generan
Esta partir de los registros:
[4;35;1mUser Load (0.6ms)[0m [0mSELECT * FROM "users" WHERE ("users"."id" = 1) LIMIT 1[0m
[4;36;1mShow Load (3.0ms)[0m [0;1mSELECT * FROM "shows" ORDER BY date ASC, attending DESC[0m
[4;35;1mUser Load (0.6ms)[0m [0mSELECT * FROM "users" WHERE ("users"."id" = 1) [0m
Finalmente, aquí está mi modelo:
create_table "shows", :force => true do |t|
t.string "headliner"
t.string "openers"
t.string "venue"
t.date "date"
t.text "description"
t.datetime "created_at"
t.datetime "updated_at"
t.decimal "price"
t.time "showtime"
t.integer "attending", :default => 0
t.string "time"
end
¿Qué me falta? ¿Qué estoy haciendo mal?
ACTUALIZACIÓN: Gracias por toda su ayuda, pero parece que todos ustedes estaban tan perplejos como yo. Lo que resolvió el problema fue cambiar las bases de datos. Cambié del sqlite3 predeterminado a mysql.
no tengo una instalación de rieles en el momento de comprobar su código; ¿Qué consulta se genera para los dos comandos? Debería poder verificar los registros en/logs para ver. – YenTheFirst
La consulta sería muy útil de hecho – aivarsak
Quizás irrelevante, pero ¿qué versión de AR está usando y qué DB? –