Rails: Ruby on Rails calculando el "rango" de una tabla de unión

Tengo 2 tablas (relaciones de muchos a muchos con sqlite3): -Usuario -Crédito (con ID de usuario y puntuación)

Y trato de calcular el rango del usuario. Para calcular el rango de este usuario, necesito encontrar la SUMA de todos los créditos de este usuario. Pero no se como hacer esto :(

He intentado algo como esto pero no funciona:

User.all.join(:credits).order(sum(:score)).index(@user)

Me sale este error:

TypeError in UsersController#index
can't convert Symbol into String

Gracias !

preguntado el 29 de julio de 12 a las 15:07

¿Ha intentado hacer lo que le indica el mensaje de error y utilizar cadenas en lugar de :credits y :score? -

Bueno, ahora recibo este error: ( User.all.join("credits").order(sum("score")).index(@user) ) método indefinido sum' for #<String:0xb5ce7c54> And when I delete the sum : ( User.all.join("credits").order("score").index(@user) ) undefined method orden para # -

Quiere encontrar el rango de a Usuario, o el rango de todos usuarios? -

Cuando haces el .all comando, obtienes el resultado... Devuelve una matriz y no un objeto de consulta, por lo que no puedes usar ninguna operación como ordenar, unir, etc. en ellos... Pon el .all hasta el final -

¿Quieres hacer esto? : User.join(:credits).order(sum(:score)).index(@user).all ? Porque esto todavía no funciona :(. (Recibo este error: método indefinido `join' for # ) -

1 Respuestas

Para sumar (o contar) debes usar suma con grupo (que se convierte en "agrupar por"), porque necesitas agrupar a los usuarios de alguna manera para poder sumar su puntuación. No probé el siguiente código, pero debería ser algo como esto:

User.select("users.name, sum(credits.score)").joins(:credits).group("credits.user_id")

Espero que esto te ayude

Respondido 29 Jul 12, 23:07

Hum, no veo nada cuando hago esto: " User.select("users.name, sum(credits.score)").joins(:credits).group("credits.user_id").index(@user)" Y cuando hago esto "User.select("users.name, sum(credits.score)").joins(:credits).group("credits.user_id")" aparece este error: "# "- msusplugas

Bueno, si hago esto: User.select("users.name, sum(credits.score)").joins(:credits).group("credits.user_id").Todo lo que obtengo es: [# , # , # ] donde el usuario de ejemplo es el primer usuario (por id) destany es el primer usuario por créditos y georgy es nuestro usuario actual. - msusplugas

está obteniendo el nombre de los usuarios agrupados, debería aparecer también la suma de la puntuación, intente nombrarlo: User.select("users.name, sum(credits.score) AS rank").joins(:credits).group( "credits.user_id"), y creo que no necesitas ".all" - Alejandro de Simone

Hum, me sale el mismo error ([# , # , # ] con .all al final y msusplugas

Alguien tiene una idea ? Lo siento, pero sigo buscando una respuesta a esta pregunta :( - msusplugas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.