I am unable to get a highcharts plugin to render a chart in a rails application:
http://github.com/loudpixel/highcharts-rails
I believe it has something to do with the sql queries to the database placed in a ruby array, which the javascript is unable to intepret. This is what I have:
def panels
pass = Student.find_by_sql('SELECT COUNT(*) FROM students WHERE student_state = 1')
fail = Student.find_by_sql('SELECT COUNT(*) FROM students WHERE student_state = 2')
student_data = [
{:name => 'Pass', :y => pass},
{:name => 'Fail', :y => fail}
]
pie_label_formatter = '
function() {
if (this.y > 15) return this.point.name;
}'
pie_tooltip_formatter = '
function() {
return "<strong>" + this.point.name + "</strong>: " + this.y + " %";
}'
@pie_chart =
Highchart.pie({
:chart => {
:renderTo => "pie-chart-container",
:margin => [50, 30, 0, 30]
},
:plotOptions => {
:pie => {
:dataLabels => {
:formatter => pie_label_formatter,
:style => {
:textShadow => '#000000 1px 1px 2px'
}
}
}
},
:series => [
{
:type => 'pie',
:data => student_data
}
],
:subtitle => {
:text => 'April 2010'
},
:title => {
:text => 'Student Status Chart'
},
:tooltip => {
:formatter => pie_tooltip_formatter
},
})
Note if I put this:
:data => student_data.to_json
It actually returns a json string of my query as text in the browser.
Also, if I hard code values (e.g. :y => 1), it will render the chart properly.
However, any database query will not render the chart properly. So I’m not sure exactly what the issue is.
Any suggestions? Thanks.
You probably want to use
countinstead offind_by_sql:find_by_sqlwill return you an array ofStudentobjects.countwill return you the number of rows matching the conditions.