Solución:
Puedes usar pluck para obtener directamente la suma:
Student.where(id: student_id).pluck('SUM(total_mark)', 'SUM(marks_obtained)')
# SELECT SUM(total_mark), SUM(marks_obtained) FROM students WHERE id = ?
Puede agregar las columnas deseadas o los campos calculados a pluck
método, y devolverá una matriz con los valores.
Puede utilizar SQL sin formato si lo necesita. Algo como esto para devolver un objeto donde tendrás que extraer los valores … ¡Sé que especificas el registro activo!
Student.select("SUM(students.total_mark) AS total_mark, SUM(students.marks_obtained) AS marks obtained").where(:id=>student_id)
Para rieles 4.2 (anteriormente sin marcar)
Student.select("SUM(students.total_mark) AS total_mark, SUM(students.marks_obtained) AS marks obtained").where(:id=>student_id)[0]
NB los corchetes que siguen a la declaración. Sin ella, la declaración devuelve una Class :: ActiveRecord_Relation, no la instancia de AR. Lo importante de esto es que NO PUEDE usar first
en la relación.
....where(:id=>student_id).first #=> PG::GroupingError: ERROR: column "students.id" must appear in the GROUP BY clause or be used in an aggregate function
Si solo desea la suma de las columnas total_marks y marks_obtained, intente esto
Student.where(:id=>student_id).sum('total_mark + marks_obtained')
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)