O'Reilly logo

Professional Ruby on Rails™ by Noel Rappin

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

11.4. Charts

There are several different charting tools available for Rails — some use Flash, and others use just CSS and HTML. This section focuses on two graph packages that build on top of RMagick.

11.4.1. Gruff

The more traditional chart package is called Gruff, written by Geoffrey Grosenbach. It is Ruby built on top of RMagick, and it offers the typical variety of bar, line, area, and pie charts. Gruff is available as a Ruby gem or as a Rails plugin. The plugin option adds a generator to create a controller for your chart. You can install the Gruff plugin as follows:

$ script/plugin install -x http://topfunky.net/svn/plugins/gruff

After the plugin is installed, you should create a controller for the chart. RESTful thinking would imply one controller for each chart (with the controller in the show method); however, that one show method could take various arguments to serve the data in different forms, or to serve different slices of the data. You can generate a Gruff chart controller just by giving it a name.

11.4.1.1. Getting Started

To get Gruff to work, you're best off creating a separate controller for the graph data. Gruff provides the following migration to do so:

$ script/generate gruff CategoryGraphs

In a comment in the generated controller, Gruff recommends adding the following line to the routes.rb file:

map.graph "graph/:action/image.png", :controller => "category_graphs"

This line will match routes of the form graph/show/image.png. You could also try a RESTful ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required